60806040523480156200001157600080fd5b50604051620052f9380380620052f9833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040525050508160009080519060200190620001cd929190620001ef565b508060019080519060200190620001e6929190620001ef565b5050506200029e565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200023257805160ff191683800117855562000263565b8280016001018555821562000263579182015b828111156200026257825182559160200191906001019062000245565b5b50905062000272919062000276565b5090565b6200029b91905b80821115620002975760008160009055506001016200027d565b5090565b90565b61504b80620002ae6000396000f3fe6080604052600436106101405760003560e01c806395d89b41116100b6578063d2c088021161006f578063d2c0880214610ce4578063e1925e1514610d50578063e49a3d3b14610f00578063e57a104a1461122e578063e985e9c51461150d578063fc7a900b1461159657610140565b806395d89b41146107455780639ac016e2146107d5578063a22cb46514610848578063a9059cbb146108a5578063b88d4fde14610900578063ce971a1014610a0557610140565b80632986c0e5116101085780632986c0e5146104505780633e54fca11461047b57806342842e0e146105bf5780636352211e1461062d57806364262dcc146106a857806370a08231146106e057610140565b8063063fc9661461014557806306fdde0314610289578063081812fc14610319578063095ea7b31461039457806323b872dd146103e2575b600080fd5b34801561015157600080fd5b5061015a6115c4565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156101a957808201518184015260208101905061018e565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156101eb5780820151818401526020810190506101d0565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561022d578082015181840152602081019050610212565b50505050905001858103825286818151815260200191508051906020019060200280838360005b8381101561026f578082015181840152602081019050610254565b505050509050019850505050505050505060405180910390f35b34801561029557600080fd5b5061029e611cda565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102de5780820151818401526020810190506102c3565b50505050905090810190601f16801561030b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561032557600080fd5b506103526004803603602081101561033c57600080fd5b8101908080359060200190929190505050611d7c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e0600480360360408110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e34565b005b61044e600480360360608110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f61565b005b34801561045c57600080fd5b5061046561210c565b6040518082815260200191505060405180910390f35b34801561048757600080fd5b50610490612112565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156104df5780820151818401526020810190506104c4565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015610521578082015181840152602081019050610506565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015610563578082015181840152602081019050610548565b50505050905001858103825286818151815260200191508051906020019060200280838360005b838110156105a557808201518184015260208101905061058a565b505050509050019850505050505050505060405180910390f35b61062b600480360360608110156105d557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061271a565b005b34801561063957600080fd5b506106666004803603602081101561065057600080fd5b810190808035906020019092919050505061271f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106de600480360360408110156106be57600080fd5b81019080803590602001909291908035906020019092919050505061275c565b005b3480156106ec57600080fd5b5061072f6004803603602081101561070357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612920565b6040518082815260200191505060405180910390f35b34801561075157600080fd5b5061075a612969565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561079a57808201518184015260208101905061077f565b50505050905090810190601f1680156107c75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107e157600080fd5b5061082e600480360360408110156107f857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a0b565b604051808215151515815260200191505060405180910390f35b34801561085457600080fd5b506108a36004803603604081101561086b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612b1f565b005b3480156108b157600080fd5b506108fe600480360360408110156108c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612cc2565b005b610a036004803603608081101561091657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561097d57600080fd5b82018360208201111561098f57600080fd5b803590602001918460018302840111640100000000831117156109b157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612df0565b005b348015610a1157600080fd5b50610a3e60048036036020811015610a2857600080fd5b8101908080359060200190929190505050612df6565b604051808b815260200180602001806020018a815260200189815260200180602001806020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018060200186810386528f818151815260200191508051906020019080838360005b83811015610b04578082015181840152602081019050610ae9565b50505050905090810190601f168015610b315780820380516001836020036101000a031916815260200191505b5086810385528e818151815260200191508051906020019080838360005b83811015610b6a578082015181840152602081019050610b4f565b50505050905090810190601f168015610b975780820380516001836020036101000a031916815260200191505b5086810384528b818151815260200191508051906020019080838360005b83811015610bd0578082015181840152602081019050610bb5565b50505050905090810190601f168015610bfd5780820380516001836020036101000a031916815260200191505b5086810383528a818151815260200191508051906020019080838360005b83811015610c36578082015181840152602081019050610c1b565b50505050905090810190601f168015610c635780820380516001836020036101000a031916815260200191505b50868103825287818151815260200191508051906020019080838360005b83811015610c9c578082015181840152602081019050610c81565b50505050905090810190601f168015610cc95780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390f35b348015610cf057600080fd5b50610cf9613293565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d3c578082015181840152602081019050610d21565b505050509050019250505060405180910390f35b348015610d5c57600080fd5b50610d8960048036036020811015610d7357600080fd5b810190808035906020019092919050505061347a565b60405180806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b83811015610ddc578082015181840152602081019050610dc1565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b83811015610e1e578082015181840152602081019050610e03565b50505050905001868103845289818151815260200191508051906020019060200280838360005b83811015610e60578082015181840152602081019050610e45565b50505050905001868103835288818151815260200191508051906020019060200280838360005b83811015610ea2578082015181840152602081019050610e87565b50505050905001868103825287818151815260200191508051906020019060200280838360005b83811015610ee4578082015181840152602081019050610ec9565b505050509050019a505050505050505050505060405180910390f35b348015610f0c57600080fd5b5061122c600480360360c0811015610f2357600080fd5b8101908080359060200190640100000000811115610f4057600080fd5b820183602082011115610f5257600080fd5b80359060200191846001830284011164010000000083111715610f7457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610fd757600080fd5b820183602082011115610fe957600080fd5b8035906020019184600183028401116401000000008311171561100b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561106e57600080fd5b82018360208201111561108057600080fd5b803590602001918460018302840111640100000000831117156110a257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561110557600080fd5b82018360208201111561111757600080fd5b8035906020019184600183028401116401000000008311171561113957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001906401000000008111156111a657600080fd5b8201836020820111156111b857600080fd5b803590602001918460018302840111640100000000831117156111da57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613812565b005b34801561123a57600080fd5b506112676004803603602081101561125157600080fd5b8101908080359060200190929190505050613e83565b604051808b815260200180602001806020018a815260200180602001806020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018060200186810386528f818151815260200191508051906020019080838360005b8381101561132d578082015181840152602081019050611312565b50505050905090810190601f16801561135a5780820380516001836020036101000a031916815260200191505b5086810385528e818151815260200191508051906020019080838360005b83811015611393578082015181840152602081019050611378565b50505050905090810190601f1680156113c05780820380516001836020036101000a031916815260200191505b5086810384528c818151815260200191508051906020019080838360005b838110156113f95780820151818401526020810190506113de565b50505050905090810190601f1680156114265780820380516001836020036101000a031916815260200191505b5086810383528b818151815260200191508051906020019080838360005b8381101561145f578082015181840152602081019050611444565b50505050905090810190601f16801561148c5780820380516001836020036101000a031916815260200191505b50868103825287818151815260200191508051906020019080838360005b838110156114c55780820151818401526020810190506114aa565b50505050905090810190601f1680156114f25780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390f35b34801561151957600080fd5b5061157c6004803603604081101561153057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061421c565b604051808215151515815260200191505060405180910390f35b6115c2600480360360208110156115ac57600080fd5b81019080803590602001909291905050506142b0565b005b606080606080600060035414156116b25760006040519080825280602002602001820160405280156116055781602001602082028038833980820191505090505b5060006040519080825280602002602001820160405280156116365781602001602082028038833980820191505090505b5060006040519080825280602002602001820160405280156116675781602001602082028038833980820191505090505b5060006040519080825280602002602001820160405280156116985781602001602082028038833980820191505090505b508393508292508191508090509350935093509350611cd4565b6000600280549050905060606003546040519080825280602002602001820160405280156116ef5781602001602082028038833980820191505090505b50905060606003546040519080825280602002602001820160405280156117255781602001602082028038833980820191505090505b509050606060035460405190808252806020026020018201604052801561175b5781602001602082028038833980820191505090505b50905060606003546040519080825280602002602001820160405280156117915781602001602082028038833980820191505090505b509050600080905060008090505b86811015611cc0576117af614e8f565b600282815481106117bc57fe5b90600052602060002090600a02016040518061014001604052908160008201548152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118795780601f1061184e57610100808354040283529160200191611879565b820191906000526020600020905b81548152906001019060200180831161185c57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561191b5780601f106118f05761010080835404028352916020019161191b565b820191906000526020600020905b8154815290600101906020018083116118fe57829003601f168201915b5050505050815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119c75780601f1061199c576101008083540402835291602001916119c7565b820191906000526020600020905b8154815290600101906020018083116119aa57829003601f168201915b50505050508152602001600582018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a695780601f10611a3e57610100808354040283529160200191611a69565b820191906000526020600020905b815481529060010190602001808311611a4c57829003601f168201915b505050505081526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201548152602001600982018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611bc15780601f10611b9657610100808354040283529160200191611bc1565b820191906000526020600020905b815481529060010190602001808311611ba457829003601f168201915b505050505081525050905060018161010001511415611cb4578060000151878481518110611beb57fe5b6020026020010181815250508060c00151868481518110611c0857fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060e00151858481518110611c5357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806101000151848481518110611c9f57fe5b60200260200101818152505082806001019350505b5080600101905061179f565b508484848499509950995099505050505050505b90919293565b606060008054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611d725780601f10611d4757610100808354040283529160200191611d72565b820191906000526020600020905b815481529060010190602001808311611d5557829003601f168201915b5050505050905090565b6000611d8782614a65565b611df9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f446f6573206e6f7420657869737400000000000000000000000000000000000081525060200191505060405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b611e3e8133612a0b565b611eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f206f6e6520656c736500000000000000000000000000000000000000000081525060200191505060405180910390fd5b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612004576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b61200e8184612a0b565b612080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f496e76616c6964206f776e65720000000000000000000000000000000000000081525060200191505060405180910390fd5b61208a8282614ad7565b6120fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f57726f6e6720617070726f76616c00000000000000000000000000000000000081525060200191505060405180910390fd5b612107838383614b43565b505050565b60095481565b606080606080600060028054905090506060816040519080825280602002602001820160405280156121535781602001602082028038833980820191505090505b5090506060826040519080825280602002602001820160405280156121875781602001602082028038833980820191505090505b5090506060836040519080825280602002602001820160405280156121bb5781602001602082028038833980820191505090505b5090506060846040519080825280602002602001820160405280156121ef5781602001602082028038833980820191505090505b50905060008090505b8581101561270257612208614e8f565b6002828154811061221557fe5b90600052602060002090600a02016040518061014001604052908160008201548152602001600182018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122d25780601f106122a7576101008083540402835291602001916122d2565b820191906000526020600020905b8154815290600101906020018083116122b557829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123745780601f1061234957610100808354040283529160200191612374565b820191906000526020600020905b81548152906001019060200180831161235757829003601f168201915b5050505050815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124205780601f106123f557610100808354040283529160200191612420565b820191906000526020600020905b81548152906001019060200180831161240357829003601f168201915b50505050508152602001600582018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124c25780601f10612497576101008083540402835291602001916124c2565b820191906000526020600020905b8154815290600101906020018083116124a557829003601f168201915b505050505081526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201548152602001600982018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561261a5780601f106125ef5761010080835404028352916020019161261a565b820191906000526020600020905b8154815290600101906020018083116125fd57829003601f168201915b5050505050815250509050806000015186838151811061263657fe5b6020026020010181815250508060c0015185838151811061265357fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508060e0015184838151811061269e57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508061010001518383815181106126ea57fe5b602002602001018181525050508060010190506121f8565b50838383839850985098509850505050505090919293565b505050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156127ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b6128098233612a0b565b61287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f206f6e6520656c736500000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016002838154811061288a57fe5b90600052602060002090600a02016008018190555080600283815481106128ad57fe5b90600052602060002090600a0201600301819055506003600081548092919060010191905055507f8916ae292317d6f324a5ed02fea84bf6881d4065b6d575a8980442469b882b7a8260018360405180848152602001838152602001828152602001935050505060405180910390a15050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612a015780601f106129d657610100808354040283529160200191612a01565b820191906000526020600020905b8154815290600101906020018083116129e457829003601f168201915b5050505050905090565b6000806004600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ae7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161491505092915050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f70657261746f722073686f756c642062652063757272656e74206f776e657281525060200191505060405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d65576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b612d6f8133612a0b565b612de1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f206f6e6520656c736500000000000000000000000000000000000000000081525060200191505060405180910390fd5b612dec338383614b43565b5050565b50505050565b60006060806000806060806000806060612e0e614e8f565b60028c81548110612e1b57fe5b90600052602060002090600a02016040518061014001604052908160008201548152602001600182018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612ed85780601f10612ead57610100808354040283529160200191612ed8565b820191906000526020600020905b815481529060010190602001808311612ebb57829003601f168201915b50505050508152602001600282018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612f7a5780601f10612f4f57610100808354040283529160200191612f7a565b820191906000526020600020905b815481529060010190602001808311612f5d57829003601f168201915b5050505050815260200160038201548152602001600482018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130265780601f10612ffb57610100808354040283529160200191613026565b820191906000526020600020905b81548152906001019060200180831161300957829003601f168201915b50505050508152602001600582018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156130c85780601f1061309d576101008083540402835291602001916130c8565b820191906000526020600020905b8154815290600101906020018083116130ab57829003601f168201915b505050505081526020016006820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016007820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160088201548152602001600982018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156132205780601f106131f557610100808354040283529160200191613220565b820191906000526020600020905b81548152906001019060200180831161320357829003601f168201915b5050505050815250509050806000015181602001518260400151836060015184610100015185608001518660a001518760c001518860e001518961012001518898508797508494508393508292508090509a509a509a509a509a509a509a509a509a509a50509193959799509193959799565b6060600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613338576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b600061334333612920565b9050600081141561338757600060405190808252806020026020018201604052801561337e5781602001602082028038833980820191505090505b50915050613477565b6060816040519080825280602002602001820160405280156133b85781602001602082028038833980820191505090505b50905060008090506000600280549050905060008090505b8181101561346e573373ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613461578084848151811061344c57fe5b60200260200101818152505082806001019350505b80806001019150506133d0565b50829450505050505b90565b60608060608060608060086000888152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156135bc57838290600052602060002090600602016040518060c001604052908160008201548152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016003820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160048201548152602001600582015481525050815260200190600101906134b6565b5050505090506000815190506060816040519080825280602002602001820160405280156135f95781602001602082028038833980820191505090505b50905060608260405190808252806020026020018201604052801561362d5781602001602082028038833980820191505090505b5090506060836040519080825280602002602001820160405280156136615781602001602082028038833980820191505090505b5090506060846040519080825280602002602001820160405280156136955781602001602082028038833980820191505090505b5090506060856040519080825280602002602001820160405280156136c95781602001602082028038833980820191505090505b50905060008090505b87518110156137f2576136e3614f0e565b8882815181106136ef57fe5b60200260200101519050806000015187838151811061370a57fe5b602002602001018181525050806020015186838151811061372757fe5b602002602001018181525050806040015185838151811061374457fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050806060015184838151811061378f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080608001518383815181106137da57fe5b602002602001018181525050508060010190506136d2565b5084848484849b509b509b509b509b505050505050505091939590929450565b6000865111613889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f546865207469746c652063616e6e6f7420626520656d7074790000000000000081525060200191505060405180910390fd5b6000845111613900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f54686520446174652063616e6e6f7420626520656d707479000000000000000081525060200191505060405180910390fd5b6000855111613977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f546865206465736372697074696f6e2063616e6e6f7420626520656d7074790081525060200191505060405180910390fd5b600082116139ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f5468652070726963652063616e6e6f7420626520656d7074790000000000000081525060200191505060405180910390fd5b6000815111613a64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f54686520696d6167652063616e6e6f7420626520656d7074790000000000000081525060200191505060405180910390fd5b613a6c614e8f565b60405180610140016040528060095481526020018881526020018781526020018481526020018681526020018581526020013373ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff1681526020016001815260200183815250905060028190806001815401808255809150506001900390600052602060002090600a0201600090919091909150600082015181600001556020820151816001019080519060200190613b35929190614f70565b506040820151816002019080519060200190613b52929190614f70565b50606082015181600301556080820151816004019080519060200190613b79929190614f70565b5060a0820151816005019080519060200190613b96929190614f70565b5060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101008201518160080155610120820151816009019080519060200190613c4d929190614f70565b50505060006001600280549050039050613c673382614c94565b7ff376cc32e072d5cce6d2829c66b30d30fa0bd8fccda5e8fc27dab2543050571581898888883333604051808881526020018060200180602001806020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184810384528a818151815260200191508051906020019080838360005b83811015613d47578082015181840152602081019050613d2c565b50505050905090810190601f168015613d745780820380516001836020036101000a031916815260200191505b50848103835289818151815260200191508051906020019080838360005b83811015613dad578082015181840152602081019050613d92565b50505050905090810190601f168015613dda5780820380516001836020036101000a031916815260200191505b50848103825288818151815260200191508051906020019080838360005b83811015613e13578082015181840152602081019050613df8565b50505050905090810190601f168015613e405780820380516001836020036101000a031916815260200191505b509a505050505050505050505060405180910390a16009600081548092919060010191905055506003600081548092919060010191905055505050505050505050565b60028181548110613e9057fe5b90600052602060002090600a0201600091509050806000015490806001018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613f425780601f10613f1757610100808354040283529160200191613f42565b820191906000526020600020905b815481529060010190602001808311613f2557829003601f168201915b505050505090806002018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015613fe05780601f10613fb557610100808354040283529160200191613fe0565b820191906000526020600020905b815481529060010190602001808311613fc357829003601f168201915b505050505090806003015490806004018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156140845780601f1061405957610100808354040283529160200191614084565b820191906000526020600020905b81548152906001019060200180831161406757829003601f168201915b505050505090806005018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156141225780601f106140f757610100808354040283529160200191614122565b820191906000526020600020905b81548152906001019060200180831161410557829003601f168201915b5050505050908060060160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806008015490806009018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156142125780601f106141e757610100808354040283529160200191614212565b820191906000526020600020905b8154815290600101906020018083116141f557829003601f168201915b505050505090508a565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000606060008060606000806142c588612df6565b5098509850985050975097505096509650600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561441c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156144be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616e6e6f742062652063757272656e74206f776e657200000000000000000081525060200191505060405180910390fd5b84341015614534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f496e76616c696420416d6f756e7400000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166002898154811061455957fe5b90600052602060002090600a020160070160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415614615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b61462081338a614b43565b84341115614672573373ffffffffffffffffffffffffffffffffffffffff166108fc8634039081150290604051600060405180830381858888f19350505050158015614670573d6000803e3d6000fd5b505b8073ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156146b8573d6000803e3d6000fd5b5033600289815481106146c757fe5b90600052602060002090600a020160070160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006002898154811061472557fe5b90600052602060002090600a020160080181905550614742614f0e565b6040518060c001604052808981526020018781526020018373ffffffffffffffffffffffffffffffffffffffff1681526020013373ffffffffffffffffffffffffffffffffffffffff16815260200142815260200186815250905060086000898152602001908152602001600020819080600181540180825580915050600190039060005260206000209060060201600090919091909150600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506080820151816004015560a082015181600501555050600360008154809291906001900391905055507f33157a2d6e087f53ff6fc0edba4550aa6df53452ece435476cd3ab334ad50c34898886898787336040518088815260200180602001806020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838103835289818151815260200191508051906020019080838360005b838110156149b3578082015181840152602081019050614998565b50505050905090810190601f1680156149e05780820380516001836020036101000a031916815260200191505b50838103825288818151815260200191508051906020019080838360005b83811015614a195780820151818401526020810190506149fe565b50505050905090810190601f168015614a465780820380516001836020036101000a031916815260200191505b50995050505050505050505060405180910390a1505050505050505050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008273ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614d37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f43616e6e6f74206265207a65726f20616464726573730000000000000000000081525060200191505060405180910390fd5b614d4081614a65565b15614d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526000815260200160200191505060405180910390fd5b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b604051806101400160405280600081526020016060815260200160608152602001600081526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518060c001604052806000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10614fb157805160ff1916838001178555614fdf565b82800160010185558215614fdf579182015b82811115614fde578251825591602001919060010190614fc3565b5b509050614fec9190614ff0565b5090565b61501291905b8082111561500e576000816000905550600101614ff6565b5090565b9056fea2646970667358221220f580ca642214a9e91d67548701df6fd6d4edeb1031aed67759c9d685cdfbaecd64736f6c634300060000330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000