60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516157b96200011f60003960008181610e2801528181610e680152818161119b015281816111db015261125701526157b96000f3fe6080604052600436106102795760003560e01c80621d35671461027e578062fdd58e146102a057806301ffc9a7146102d3578063075461721461030357806307e0db17146103315780630df37483146103515780630e89341c1461037157806310ddb1371461039e578063149e3e1f146103be5780632eb2c2d6146103e65780633659cfe6146104065780633d8b38f6146104265780633f1f4fa4146104465780633f4ba83a1461047357806342d65a8d1461048857806344770515146104a85780634ab4e687146104bd5780634db8226a146104d05780634e1273f4146104e35780634f1ef286146105105780634f558e791461052357806352d1902d146105535780635b8c41e6146105685780635c975abb146105b757806366ad5c8a146105d0578063715018a6146105f05780637533d788146106055780638129fc1c146106255780638456cb591461063a5780638608e5f81461064f578063862440e21461067d5780638cfd8f5c1461069d5780638da5cb5b146106d5578063950c8a74146106ea5780639f38369a1461070a578063a22cb4651461072a578063a6c3d1651461074a578063af3fb21c1461076a578063b25356631461077f578063b353aaa71461079f578063b48ab8b6146107bf578063baf3292d146107df578063bd85b039146107ff578063c44618341461082d578063c87b56dd14610843578063cbed8b9c14610863578063d1deba1f14610883578063df2a5b3b14610896578063e985e9c5146108b6578063eab45d9c146108d6578063eb8d72b7146108f6578063ed629c5c14610916578063f242432a14610930578063f2fde38b14610950578063f5ecbdbc14610970578063fca3b5aa14610990575b600080fd5b34801561028a57600080fd5b5061029e610299366004613f7c565b6109b0565b005b3480156102ac57600080fd5b506102c06102bb36600461402f565b610bcc565b6040519081526020015b60405180910390f35b3480156102df57600080fd5b506102f36102ee366004614071565b610c63565b60405190151581526020016102ca565b34801561030f57600080fd5b5061028b54610324906001600160a01b031681565b6040516102ca919061408e565b34801561033d57600080fd5b5061029e61034c3660046140a2565b610c6e565b34801561035d57600080fd5b5061029e61036c3660046140bd565b610cdb565b34801561037d57600080fd5b5061039161038c3660046140d9565b610cfa565b6040516102ca9190614142565b3480156103aa57600080fd5b5061029e6103b93660046140a2565b610d9d565b3480156103ca57600080fd5b506103d3600281565b60405161ffff90911681526020016102ca565b3480156103f257600080fd5b5061029e6104013660046142b8565b610dd9565b34801561041257600080fd5b5061029e610421366004614365565b610e1e565b34801561043257600080fd5b506102f3610441366004614382565b610ee6565b34801561045257600080fd5b506102c06104613660046140a2565b60686020526000908152604090205481565b34801561047f57600080fd5b5061029e610fb2565b34801561049457600080fd5b5061029e6104a3366004614382565b610fc4565b3480156104b457600080fd5b506102c0600081565b61029e6104cb3660046143d4565b61102e565b61029e6104de3660046144c3565b611048565b3480156104ef57600080fd5b506105036104fe366004614569565b611068565b6040516102ca9190614670565b61029e61051e366004614683565b611191565b34801561052f57600080fd5b506102f361053e3660046140d9565b600090815261015f6020526040902054151590565b34801561055f57600080fd5b506102c061124a565b34801561057457600080fd5b506102c06105833660046146c8565b6097602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b3480156105c357600080fd5b506101c35460ff166102f3565b3480156105dc57600080fd5b5061029e6105eb366004613f7c565b6112f9565b3480156105fc57600080fd5b5061029e6113d5565b34801561061157600080fd5b506103916106203660046140a2565b6113e7565b34801561063157600080fd5b5061029e611481565b34801561064657600080fd5b5061029e61177a565b34801561065b57600080fd5b5061066f61066a366004614735565b61178a565b6040516102ca9291906147cb565b34801561068957600080fd5b5061029e6106983660046147d9565b6117ba565b3480156106a957600080fd5b506102c06106b8366004614829565b606760209081526000928352604080842090915290825290205481565b3480156106e157600080fd5b5061032461185c565b3480156106f657600080fd5b50606954610324906001600160a01b031681565b34801561071657600080fd5b506103916107253660046140a2565b61186b565b34801561073657600080fd5b5061029e61074536600461485c565b611981565b34801561075657600080fd5b5061029e610765366004614382565b61198c565b34801561077657600080fd5b506103d3600181565b34801561078b57600080fd5b5061066f61079a366004614888565b611a15565b3480156107ab57600080fd5b50606554610324906001600160a01b031681565b3480156107cb57600080fd5b5061029e6107da366004614924565b611ac6565b3480156107eb57600080fd5b5061029e6107fa366004614365565b611b33565b34801561080b57600080fd5b506102c061081a3660046140d9565b600090815261015f602052604090205490565b34801561083957600080fd5b506102c061271081565b34801561084f57600080fd5b5061039161085e3660046140d9565b611b86565b34801561086f57600080fd5b5061029e61087e3660046149be565b611ba0565b61029e610891366004613f7c565b611c19565b3480156108a257600080fd5b5061029e6108b1366004614a2c565b611e2f565b3480156108c257600080fd5b506102f36108d1366004614a68565b611ee1565b3480156108e257600080fd5b5061029e6108f1366004614aa1565b611f10565b34801561090257600080fd5b5061029e610911366004614382565b611f59565b34801561092257600080fd5b5060fb546102f39060ff1681565b34801561093c57600080fd5b5061029e61094b366004614abc565b611fb3565b34801561095c57600080fd5b5061029e61096b366004614365565b611ff8565b34801561097c57600080fd5b5061039161098b366004614b24565b61206e565b34801561099c57600080fd5b5061029e6109ab366004614365565b612103565b6065546001600160a01b0316336001600160a01b031614610a185760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526066602052604081208054610a3690614b71565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6290614b71565b8015610aaf5780601f10610a8457610100808354040283529160200191610aaf565b820191906000526020600020905b815481529060010190602001808311610a9257829003601f168201915b50505050509050805186869050148015610aca575060008151115b8015610af2575080516020820120604051610ae89088908890614bab565b6040518091039020145b610b4d5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610a0f565b610bc38787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506121f292505050565b50505050505050565b60006001600160a01b038316610c375760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b6064820152608401610a0f565b50600081815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b6000610c5d8261226b565b610c76612288565b6065546040516307e0db1760e01b815261ffff831660048201526001600160a01b03909116906307e0db17906024015b600060405180830381600087803b158015610cc057600080fd5b505af1158015610cd4573d6000803e3d6000fd5b5050505050565b610ce3612288565b61ffff909116600090815260686020526040902055565b600081815261028c60205260409020805460609190610d1890614b71565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4490614b71565b8015610d915780601f10610d6657610100808354040283529160200191610d91565b820191906000526020600020905b815481529060010190602001808311610d7457829003601f168201915b50505050509050919050565b610da5612288565b6065546040516310ddb13760e01b815261ffff831660048201526001600160a01b03909116906310ddb13790602401610ca6565b6001600160a01b038516331480610df55750610df58533611ee1565b610e115760405162461bcd60e51b8152600401610a0f90614bbb565b610cd485858585856122e7565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610e665760405162461bcd60e51b8152600401610a0f90614c09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610e9861247c565b6001600160a01b031614610ebe5760405162461bcd60e51b8152600401610a0f90614c43565b610ec781612498565b60408051600080825260208201909252610ee3918391906124a0565b50565b61ffff831660009081526066602052604081208054829190610f0790614b71565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3390614b71565b8015610f805780601f10610f5557610100808354040283529160200191610f80565b820191906000526020600020905b815481529060010190602001808311610f6357829003601f168201915b505050505090508383604051610f97929190614bab565b60405180910390208180519060200120149150509392505050565b610fba612288565b610fc2612610565b565b610fcc612288565b6065546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d9061100090869086908690600401614ca6565b600060405180830381600087803b15801561101a57600080fd5b505af1158015610bc3573d6000803e3d6000fd5b61103e888888888888888861265d565b5050505050505050565b61103e8888886110578961283b565b6110608961283b565b88888861265d565b606081518351146110cd5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610a0f565b600083516001600160401b038111156110e8576110e8614155565b604051908082528060200260200182016040528015611111578160200160208202803683370190505b50905060005b84518110156111895761115c85828151811061113557611135614cc4565b602002602001015185838151811061114f5761114f614cc4565b6020026020010151610bcc565b82828151811061116e5761116e614cc4565b602090810291909101015261118281614cf0565b9050611117565b509392505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111d95760405162461bcd60e51b8152600401610a0f90614c09565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661120b61247c565b6001600160a01b0316146112315760405162461bcd60e51b8152600401610a0f90614c43565b61123a82612498565b611246828260016124a0565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112e55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610a0f565b506000805160206156698339815191525b90565b3330146113575760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610a0f565b6113cd8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061288692505050565b505050505050565b6113dd612288565b610fc260006129ca565b6066602052600090815260409020805461140090614b71565b80601f016020809104026020016040519081016040528092919081815260200182805461142c90614b71565b80156114795780601f1061144e57610100808354040283529160200191611479565b820191906000526020600020905b81548152906001019060200180831161145c57829003601f168201915b505050505081565b600054610100900460ff16158080156114a15750600054600160ff909116105b806114c257506114b030612a1c565b1580156114c2575060005460ff166001145b6115255760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610a0f565b6000805460ff191660011790558015611548576000805461ff0019166101001790555b611575604051806020016040528060008152507366a71dcef29a0ffbdbe3c6a460a3b5bc225cd675612a2b565b61157d612a6c565b611585612a9b565b61158d612aca565b611595612aca565b61159d612af1565b60405180606001604052806035815260200161574f603591396000805261028c6020527f4530eaaecbf763a725a4f836b172987b01976048c57fb5f302d997833d0f7b9c906115ec9082614d64565b5060405180606001604052806035815260200161561460359139600160005261028c6020527f4fc00d1e64a967ca71e8919d27572981b96316df415def7e4b6b4678eac793c19061163d9082614d64565b506040518060600160405280603581526020016156e560359139600260005261028c6020527f3f52a5daaa05ae8589dd137cf563e494b6136e91d5ed3242e793f358818a4cfa9061168e9082614d64565b506040518060600160405280603581526020016156b060359139600360005261028c6020527f68a38f44900fb32be379eeddf7b33bbbd44a70831c18d7b429ac181781bab6f1906116df9082614d64565b5060405180606001604052806035815260200161571a60359139600460005261028c6020527f0d13c77cafc34111028c45b35387360d06de86efe26cafde693396e4e1172af2906117309082614d64565b508015610ee3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a150565b611782612288565b610fc2612b20565b6000806117ab888861179b8961283b565b6117a48961283b565b8888611a15565b91509150965096945050505050565b6117c2612288565b60048211156118135760405162461bcd60e51b815260206004820152601d60248201527f546f6b656e204944206f7574206f6620616c6c6f7765642072616e67650000006044820152606401610a0f565b600082815261028c6020526040902061182c8282614d64565b5060405182907ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce790600090a25050565b6033546001600160a01b031690565b61ffff811660009081526066602052604081208054606092919061188e90614b71565b80601f01602080910402602001604051908101604052809291908181526020018280546118ba90614b71565b80156119075780601f106118dc57610100808354040283529160200191611907565b820191906000526020600020905b8154815290600101906020018083116118ea57829003601f168201915b50505050509050805160000361195f5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610a0f565b61197a6000601483516119729190614e1d565b839190612b5e565b9392505050565b611246338383612c6b565b611994612288565b8181306040516020016119a993929190614e30565b60408051601f1981840301815291815261ffff85166000908152606660205220906119d49082614d64565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611a0893929190614ca6565b60405180910390a1505050565b6000806000878787604051602001611a2f93929190614e51565b60408051601f198184030181529082905260655463040a7bb160e41b83529092506001600160a01b0316906340a7bb1090611a76908c90309086908b908b90600401614e8a565b6040805180830381865afa158015611a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab69190614ede565b9250925050965096945050505050565b61028b546001600160a01b0316336001600160a01b031614611b215760405162461bcd60e51b815260206004820152601460248201527313db9b1e481b5a5b9d195c8818d85b881b5a5b9d60621b6044820152606401610a0f565b611b2d84848484612d4c565b50505050565b611b3b612288565b606980546001600160a01b0319166001600160a01b0383161790556040517f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b9061176f90839061408e565b61028c602052600090815260409020805461140090614b71565b611ba8612288565b6065546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c90611be09088908890889088908890600401614f02565b600060405180830381600087803b158015611bfa57600080fd5b505af1158015611c0e573d6000803e3d6000fd5b505050505050505050565b61ffff86166000908152609760205260408082209051611c3c9088908890614bab565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080611cbc5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610a0f565b808383604051611ccd929190614bab565b604051809103902014611d2c5760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610a0f565b61ffff87166000908152609760205260408082209051611d4f9089908990614bab565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252611de7918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a93509150889088908190840183828082843760009201919091525061288692505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051611e1e959493929190614f3b565b60405180910390a150505050505050565b611e37612288565b60008111611e7f5760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610a0f565b61ffff83811660008181526067602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611a08565b6001600160a01b03918216600090815261012e6020908152604080832093909416825291909152205460ff1690565b611f18612288565b60fb805460ff19168215159081179091556040519081527f1584ad594a70cbe1e6515592e1272a987d922b097ead875069cebe8b40c004a49060200161176f565b611f61612288565b61ffff83166000908152606660205260409020611f7f828483614f76565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611a0893929190614ca6565b6001600160a01b038516331480611fcf5750611fcf8533611ee1565b611feb5760405162461bcd60e51b8152600401610a0f90614bbb565b610cd48585858585612ed0565b612000612288565b6001600160a01b0381166120655760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0f565b610ee3816129ca565b606554604051633d7b2f6f60e21b815261ffff808716600483015285166024820152306044820152606481018390526060916001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156120d0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120f89190810190615087565b90505b949350505050565b61210b612288565b61028b546001600160a01b038083169116036121575760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e481cd95d60aa1b6044820152606401610a0f565b6001600160a01b0381166121a65760405162461bcd60e51b815260206004820152601660248201527543616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a0f565b61028b80546001600160a01b0319166001600160a01b0383161790556040517f726b590ef91a8c76ad05bbe91a57ef84605276528f49cd47d787f558a4e755b69061176f90839061408e565b6000806122555a60966366ad5c8a60e01b8989898960405160240161221a94939291906150bb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091523092919061300f565b91509150816113cd576113cd8686868685613099565b60006001600160e01b031982161580610c5d5750610c5d82613136565b3361229161185c565b6001600160a01b031614610fc25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a0f565b81518351146123085760405162461bcd60e51b8152600401610a0f906150f9565b6001600160a01b03841661232e5760405162461bcd60e51b8152600401610a0f90615141565b3361233d818787878787613176565b60005b845181101561242857600085828151811061235d5761235d614cc4565b60200260200101519050600085838151811061237b5761237b614cc4565b602090810291909101810151600084815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156123cd5760405162461bcd60e51b8152600401610a0f90615186565b600083815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061240d9084906151d0565b925050819055505050508061242190614cf0565b9050612340565b50846001600160a01b0316866001600160a01b0316826001600160a01b03166000805160206155f483398151915287876040516124669291906151e3565b60405180910390a46113cd81878787878761318c565b600080516020615669833981519152546001600160a01b031690565b610ee3612288565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156124d8576124d3836132ee565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612532575060408051601f3d908101601f1916820190925261252f91810190615208565b60015b6125955760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a0f565b60008051602061566983398151915281146126045760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a0f565b506124d3838383613388565b6126186133ad565b6101c3805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612653919061408e565b60405180910390a1565b61266a88888888886133f7565b600086868660405160200161268193929190614e51565b6040516020818303038152906040529050855160010361277d5760fb5460ff16156126b9576126b4886001846000613483565b6126d8565b8151156126d85760405162461bcd60e51b8152600401610a0f90615221565b6126e688828686863461355d565b866040516126f49190615265565b6040518091039020896001600160a01b03168961ffff167f968b0d61ebcf43e5d76ed87bd2c4ee2f22b4969b9f4ca49e3373c025eddd5eeb8960008151811061273f5761273f614cc4565b60200260200101518960008151811061275a5761275a614cc4565b60200260200101516040516127709291906147cb565b60405180910390a4611c0e565b600186511115611c0e5760fb5460ff16156127a5576127a0886002846000613483565b6127c4565b8151156127c45760405162461bcd60e51b8152600401610a0f90615221565b6127d288828686863461355d565b866040516127e09190615265565b6040518091039020896001600160a01b03168961ffff167fddd15f7cfbd674ac2096d598f1650367f8a8bd72b4e3abd85591099ea3b57e3389896040516128289291906151e3565b60405180910390a4505050505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061287557612875614cc4565b602090810291909101015292915050565b60008060008380602001905181019061289f91906152e7565b601483015192955090935091506128b8888285856136e6565b825160010361295857806001600160a01b0316876040516128d99190615265565b60405180910390208961ffff167f1bf64e58d19fc43de4c44b3d1bb1fae313979af831a7a39f3297564294329f0f8660008151811061291a5761291a614cc4565b60200260200101518660008151811061293557612935614cc4565b602002602001015160405161294b9291906147cb565b60405180910390a461103e565b60018351111561103e57806001600160a01b03168760405161297a9190615265565b60405180910390208961ffff167f1ae08edbbcd7baa8d064835de8593ce16b313414525ac89534e349f4da7926e486866040516129b89291906151e3565b60405180910390a45050505050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff16612a525760405162461bcd60e51b8152600401610a0f9061536e565b612a5b82613701565b612a63613731565b61124681613761565b600054610100900460ff16612a935760405162461bcd60e51b8152600401610a0f9061536e565b610fc2613731565b600054610100900460ff16612ac25760405162461bcd60e51b8152600401610a0f9061536e565b610fc26137aa565b600054610100900460ff16610fc25760405162461bcd60e51b8152600401610a0f9061536e565b600054610100900460ff16612b185760405162461bcd60e51b8152600401610a0f9061536e565b610fc26137de565b612b2861380d565b6101c3805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126463390565b606081612b6c81601f6151d0565b1015612bab5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610a0f565b612bb582846151d0565b84511015612bf95760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610a0f565b606082158015612c185760405191506000825260208201604052612c62565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612c51578051835260209283019201612c39565b5050858452601f01601f1916604052505b50949350505050565b816001600160a01b0316836001600160a01b031603612cde5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610a0f565b6001600160a01b03838116600081815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038416612dac5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a0f565b8151835114612dcd5760405162461bcd60e51b8152600401610a0f906150f9565b33612ddd81600087878787613176565b60005b8451811015612e7a57838181518110612dfb57612dfb614cc4565b602002602001015161012d6000878481518110612e1a57612e1a614cc4565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254612e6291906151d0565b90915550819050612e7281614cf0565b915050612de0565b50846001600160a01b031660006001600160a01b0316826001600160a01b03166000805160206155f48339815191528787604051612eb99291906151e3565b60405180910390a4610cd48160008787878761318c565b6001600160a01b038416612ef65760405162461bcd60e51b8152600401610a0f90615141565b336000612f028561283b565b90506000612f0f8561283b565b9050612f1f838989858589613176565b600086815261012d602090815260408083206001600160a01b038c16845290915290205485811015612f635760405162461bcd60e51b8152600401610a0f90615186565b600087815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612fa39084906151d0565b92505081905550876001600160a01b0316896001600160a01b0316856001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612ff99291906147cb565b60405180910390a4611c0e848a8a8a8a8a613854565b6000606060008060008661ffff166001600160401b0381111561303457613034614155565b6040519080825280601f01601f19166020018201604052801561305e576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115613080578692505b828152826000602083013e909890975095505050505050565b8180519060200120609760008761ffff1661ffff168152602001908152602001600020856040516130ca9190615265565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c9061312790879087908790879087906153b9565b60405180910390a15050505050565b60006001600160e01b03198216636cdb3d1360e11b148061316757506001600160e01b031982166303a24d0760e21b145b80610c5d5750610c5d82613916565b61317e61380d565b6113cd86868686868661394b565b61319e846001600160a01b0316612a1c565b156113cd5760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906131d7908990899088908890889060040161540b565b6020604051808303816000875af1925050508015613212575060408051601f3d908101601f1916820190925261320f91810190615449565b60015b6132be5761321e615466565b806308c379a0036132575750613232615481565b8061323d5750613259565b8060405162461bcd60e51b8152600401610a0f9190614142565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610a0f565b6001600160e01b0319811663bc197c8160e01b14610bc35760405162461bcd60e51b8152600401610a0f9061550a565b6132f781612a1c565b6133595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a0f565b60008051602061566983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61339183613ac7565b60008251118061339e5750805b156124d357611b2d8383613b07565b6101c35460ff16610fc25760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a0f565b336001600160a01b03861681148061341457506134148682611ee1565b6134785760405162461bcd60e51b815260206004820152602f60248201527f4f4e4654313135353a2073656e642063616c6c6572206973206e6f74206f776e60448201526e195c881b9bdc88185c1c1c9bdd9959608a1b6064820152608401610a0f565b6113cd868484613b2c565b600061348e83613d33565b61ffff8087166000908152606760209081526040808320938916835292905290812054919250906134c09084906151d0565b90506000811161350f5760405162461bcd60e51b815260206004820152601a602482015279131e905c1c0e881b5a5b91d85cd31a5b5a5d081b9bdd081cd95d60321b6044820152606401610a0f565b808210156113cd5760405162461bcd60e51b815260206004820152601b60248201527a4c7a4170703a20676173206c696d697420697320746f6f206c6f7760281b6044820152606401610a0f565b61ffff86166000908152606660205260408120805461357b90614b71565b80601f01602080910402602001604051908101604052809291908181526020018280546135a790614b71565b80156135f45780601f106135c9576101008083540402835291602001916135f4565b820191906000526020600020905b8154815290600101906020018083116135d757829003601f168201915b5050505050905080516000036136655760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610a0f565b613670878751613d8e565b60655460405162c5803160e81b81526001600160a01b039091169063c58031009084906136ab908b9086908c908c908c908c90600401615552565b6000604051808303818588803b1580156136c457600080fd5b505af11580156136d8573d6000803e3d6000fd5b505050505050505050505050565b611b2d83838360405180602001604052806000815250612d4c565b600054610100900460ff166137285760405162461bcd60e51b8152600401610a0f9061536e565b610ee381613dff565b600054610100900460ff166137585760405162461bcd60e51b8152600401610a0f9061536e565b610fc2336129ca565b600054610100900460ff166137885760405162461bcd60e51b8152600401610a0f9061536e565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166137d15760405162461bcd60e51b8152600401610a0f9061536e565b6101c3805460ff19169055565b600054610100900460ff166138055760405162461bcd60e51b8152600401610a0f9061536e565b600161025955565b6101c35460ff1615610fc25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a0f565b613866846001600160a01b0316612a1c565b156113cd5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061389f90899089908890889088906004016155b9565b6020604051808303816000875af19250505080156138da575060408051601f3d908101601f191682019092526138d791810190615449565b60015b6138e65761321e615466565b6001600160e01b0319811663f23a6e6160e01b14610bc35760405162461bcd60e51b8152600401610a0f9061550a565b60006001600160e01b031982166319abbbbb60e11b1480610c5d57506301ffc9a760e01b6001600160e01b0319831614610c5d565b6001600160a01b0385166139d35760005b83518110156139d15782818151811061397757613977614cc4565b602002602001015161015f600086848151811061399657613996614cc4565b6020026020010151815260200190815260200160002060008282546139bb91906151d0565b909155506139ca905081614cf0565b905061395c565b505b6001600160a01b0384166113cd5760005b8351811015610bc3576000848281518110613a0157613a01614cc4565b602002602001015190506000848381518110613a1f57613a1f614cc4565b60200260200101519050600061015f600084815260200190815260200160002054905081811015613aa35760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608401610a0f565b600092835261015f602052604090922091039055613ac081614cf0565b90506139e4565b613ad0816132ee565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061197a838360405180606001604052806027815260200161568960279139613e0c565b6001600160a01b038316613b8e5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610a0f565b8051825114613baf5760405162461bcd60e51b8152600401610a0f906150f9565b6000339050613bd281856000868660405180602001604052806000815250613176565b60005b8351811015613cd8576000848281518110613bf257613bf2614cc4565b602002602001015190506000848381518110613c1057613c10614cc4565b602090810291909101810151600084815261012d835260408082206001600160a01b038c168352909352919091205490915081811015613c9e5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610a0f565b600092835261012d602090815260408085206001600160a01b038b1686529091529092209103905580613cd081614cf0565b915050613bd5565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03166000805160206155f48339815191528686604051613d179291906151e3565b60405180910390a4604080516020810190915260009052611b2d565b6000602282511015613d865760405162461bcd60e51b815260206004820152601c60248201527b4c7a4170703a20696e76616c69642061646170746572506172616d7360201b6044820152606401610a0f565b506022015190565b61ffff821660009081526068602052604081205490819003613daf57506127105b808211156124d35760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610a0f565b61012f6112468282614d64565b6060600080856001600160a01b031685604051613e299190615265565b600060405180830381855af49150503d8060008114613e64576040519150601f19603f3d011682016040523d82523d6000602084013e613e69565b606091505b5091509150613e7a86838387613e84565b9695505050505050565b60608315613ef1578251600003613eea57613e9e85612a1c565b613eea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a0f565b50816120fb565b6120fb838381511561323d5781518083602001fd5b803561ffff81168114613f1857600080fd5b919050565b60008083601f840112613f2f57600080fd5b5081356001600160401b03811115613f4657600080fd5b602083019150836020828501011115613f5e57600080fd5b9250929050565b80356001600160401b0381168114613f1857600080fd5b60008060008060008060808789031215613f9557600080fd5b613f9e87613f06565b955060208701356001600160401b0380821115613fba57600080fd5b613fc68a838b01613f1d565b9097509550859150613fda60408a01613f65565b94506060890135915080821115613ff057600080fd5b50613ffd89828a01613f1d565b979a9699509497509295939492505050565b6001600160a01b0381168114610ee357600080fd5b8035613f188161400f565b6000806040838503121561404257600080fd5b823561404d8161400f565b946020939093013593505050565b6001600160e01b031981168114610ee357600080fd5b60006020828403121561408357600080fd5b813561197a8161405b565b6001600160a01b0391909116815260200190565b6000602082840312156140b457600080fd5b61197a82613f06565b600080604083850312156140d057600080fd5b61404d83613f06565b6000602082840312156140eb57600080fd5b5035919050565b60005b8381101561410d5781810151838201526020016140f5565b50506000910152565b6000815180845261412e8160208601602086016140f2565b601f01601f19169290920160200192915050565b60208152600061197a6020830184614116565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561419057614190614155565b6040525050565b60006001600160401b038211156141b0576141b0614155565b5060051b60200190565b600082601f8301126141cb57600080fd5b813560206141d882614197565b6040516141e5828261416b565b83815260059390931b850182019282810191508684111561420557600080fd5b8286015b848110156142205780358352918301918301614209565b509695505050505050565b60006001600160401b0382111561424457614244614155565b50601f01601f191660200190565b600061425d8361422b565b60405161426a828261416b565b80925084815285858501111561427f57600080fd5b8484602083013760006020868301015250509392505050565b600082601f8301126142a957600080fd5b61197a83833560208501614252565b600080600080600060a086880312156142d057600080fd5b85356142db8161400f565b945060208601356142eb8161400f565b935060408601356001600160401b038082111561430757600080fd5b61431389838a016141ba565b9450606088013591508082111561432957600080fd5b61433589838a016141ba565b9350608088013591508082111561434b57600080fd5b5061435888828901614298565b9150509295509295909350565b60006020828403121561437757600080fd5b813561197a8161400f565b60008060006040848603121561439757600080fd5b6143a084613f06565b925060208401356001600160401b038111156143bb57600080fd5b6143c786828701613f1d565b9497909650939450505050565b600080600080600080600080610100898b0312156143f157600080fd5b6143fa89614024565b975061440860208a01613f06565b965060408901356001600160401b038082111561442457600080fd5b6144308c838d01614298565b975060608b013591508082111561444657600080fd5b6144528c838d016141ba565b965060808b013591508082111561446857600080fd5b6144748c838d016141ba565b955061448260a08c01614024565b945061449060c08c01614024565b935060e08b01359150808211156144a657600080fd5b506144b38b828c01614298565b9150509295985092959890939650565b600080600080600080600080610100898b0312156144e057600080fd5b88356144eb8161400f565b97506144f960208a01613f06565b965060408901356001600160401b038082111561451557600080fd5b6145218c838d01614298565b975060608b0135965060808b0135955060a08b013591506145418261400f565b90935060c08a0135906145538261400f565b90925060e08a013590808211156144a657600080fd5b6000806040838503121561457c57600080fd5b82356001600160401b038082111561459357600080fd5b818501915085601f8301126145a757600080fd5b813560206145b482614197565b6040516145c1828261416b565b83815260059390931b85018201928281019150898411156145e157600080fd5b948201945b838610156146085785356145f98161400f565b825294820194908201906145e6565b9650508601359250508082111561461e57600080fd5b5061462b858286016141ba565b9150509250929050565b600081518084526020808501945080840160005b8381101561466557815187529582019590820190600101614649565b509495945050505050565b60208152600061197a6020830184614635565b6000806040838503121561469657600080fd5b82356146a18161400f565b915060208301356001600160401b038111156146bc57600080fd5b61462b85828601614298565b6000806000606084860312156146dd57600080fd5b6146e684613f06565b925060208401356001600160401b0381111561470157600080fd5b61470d86828701614298565b92505061471c60408501613f65565b90509250925092565b80358015158114613f1857600080fd5b60008060008060008060c0878903121561474e57600080fd5b61475787613f06565b955060208701356001600160401b038082111561477357600080fd5b61477f8a838b01614298565b9650604089013595506060890135945061479b60808a01614725565b935060a08901359150808211156147b157600080fd5b506147be89828a01614298565b9150509295509295509295565b918252602082015260400190565b600080604083850312156147ec57600080fd5b8235915060208301356001600160401b0381111561480957600080fd5b8301601f8101851361481a57600080fd5b61462b85823560208401614252565b6000806040838503121561483c57600080fd5b61484583613f06565b915061485360208401613f06565b90509250929050565b6000806040838503121561486f57600080fd5b823561487a8161400f565b915061485360208401614725565b60008060008060008060c087890312156148a157600080fd5b6148aa87613f06565b955060208701356001600160401b03808211156148c657600080fd5b6148d28a838b01614298565b965060408901359150808211156148e857600080fd5b6148f48a838b016141ba565b9550606089013591508082111561490a57600080fd5b6149168a838b016141ba565b945061479b60808a01614725565b6000806000806080858703121561493a57600080fd5b84356149458161400f565b935060208501356001600160401b038082111561496157600080fd5b61496d888389016141ba565b9450604087013591508082111561498357600080fd5b61498f888389016141ba565b935060608701359150808211156149a557600080fd5b506149b287828801614298565b91505092959194509250565b6000806000806000608086880312156149d657600080fd5b6149df86613f06565b94506149ed60208701613f06565b93506040860135925060608601356001600160401b03811115614a0f57600080fd5b614a1b88828901613f1d565b969995985093965092949392505050565b600080600060608486031215614a4157600080fd5b614a4a84613f06565b9250614a5860208501613f06565b9150604084013590509250925092565b60008060408385031215614a7b57600080fd5b8235614a868161400f565b91506020830135614a968161400f565b809150509250929050565b600060208284031215614ab357600080fd5b61197a82614725565b600080600080600060a08688031215614ad457600080fd5b8535614adf8161400f565b94506020860135614aef8161400f565b9350604086013592506060860135915060808601356001600160401b03811115614b1857600080fd5b61435888828901614298565b60008060008060808587031215614b3a57600080fd5b614b4385613f06565b9350614b5160208601613f06565b92506040850135614b618161400f565b9396929550929360600135925050565b600181811c90821680614b8557607f821691505b602082108103614ba557634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c9082015260008051602061564983398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061564983398151915260408201526b6163746976652070726f787960a01b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff841681526040602082015260006120f8604083018486614c7d565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614d0257614d02614cda565b5060010190565b601f8211156124d357600081815260208120601f850160051c81016020861015614d305750805b601f850160051c820191505b818110156113cd57828155600101614d3c565b600019600383901b1c191660019190911b1790565b81516001600160401b03811115614d7d57614d7d614155565b614d9181614d8b8454614b71565b84614d09565b602080601f831160018114614dc05760008415614dae5750858301515b614db88582614d4f565b8655506113cd565b600085815260208120601f198616915b82811015614def57888601518255948401946001909101908401614dd0565b5085821015614e0d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b81810381811115610c5d57610c5d614cda565b8284823760609190911b6001600160601b0319169101908152601401919050565b606081526000614e646060830186614116565b8281036020840152614e768186614635565b90508281036040840152613e7a8185614635565b61ffff861681526001600160a01b038516602082015260a060408201819052600090614eb890830186614116565b84151560608401528281036080840152614ed28185614116565b98975050505050505050565b60008060408385031215614ef157600080fd5b505080516020909101519092909150565b600061ffff808816835280871660208401525084604083015260806060830152614f30608083018486614c7d565b979650505050505050565b61ffff86168152608060208201526000614f59608083018688614c7d565b6001600160401b0394909416604083015250606001529392505050565b6001600160401b03831115614f8d57614f8d614155565b614fa183614f9b8354614b71565b83614d09565b6000601f841160018114614fcf5760008515614fbd5750838201355b614fc78682614d4f565b845550610cd4565b600083815260209020601f19861690835b828110156150005786850135825560209485019460019092019101614fe0565b508682101561501d5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600082601f83011261504057600080fd5b815161504b8161422b565b604051615058828261416b565b82815285602084870101111561506d57600080fd5b61507e8360208301602088016140f2565b95945050505050565b60006020828403121561509957600080fd5b81516001600160401b038111156150af57600080fd5b6120fb8482850161502f565b61ffff851681526080602082015260006150d86080830186614116565b6001600160401b03851660408401528281036060840152614f308185614116565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b80820180821115610c5d57610c5d614cda565b6040815260006151f66040830185614635565b828103602084015261507e8185614635565b60006020828403121561521a57600080fd5b5051919050565b60208082526024908201527f4c7a4170703a205f61646170746572506172616d73206d75737420626520656d604082015263383a3c9760e11b606082015260800190565b600082516152778184602087016140f2565b9190910192915050565b600082601f83011261529257600080fd5b8151602061529f82614197565b6040516152ac828261416b565b83815260059390931b85018201928281019150868411156152cc57600080fd5b8286015b8481101561422057805183529183019183016152d0565b6000806000606084860312156152fc57600080fd5b83516001600160401b038082111561531357600080fd5b61531f8783880161502f565b9450602086015191508082111561533557600080fd5b61534187838801615281565b9350604086015191508082111561535757600080fd5b5061536486828701615281565b9150509250925092565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b61ffff8616815260a0602082015260006153d660a0830187614116565b6001600160401b038616604084015282810360608401526153f78186614116565b90508281036080840152614ed28185614116565b6001600160a01b0386811682528516602082015260a06040820181905260009061543790830186614635565b82810360608401526153f78186614635565b60006020828403121561545b57600080fd5b815161197a8161405b565b600060033d11156112f65760046000803e5060005160e01c90565b600060443d101561548f5790565b6040516003193d81016004833e81513d6001600160401b0380831160248401831017156154be57505050505090565b82850191508151818111156154d65750505050505090565b843d87010160208285010111156154f05750505050505090565b6154ff6020828601018761416b565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b61ffff8716815260c06020820152600061556f60c0830188614116565b82810360408401526155818188614116565b6001600160a01b0387811660608601528616608085015283810360a085015290506155ac8185614116565b9998505050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090614f309083018461411656fe4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb697066733a2f2f516d5455467453706d426438757373746f507859314c67315a656f3371563737477a5468534a35506a636353727046756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564697066733a2f2f516d61614c4a4d3269703562473651426d435075704e58364635747338386558594b773368346771364d716a6776697066733a2f2f516d634d78585550394a38714a684e796e53656858626a526e7337394147527353327657416f6276426165513733697066733a2f2f516d616570337a4c414a34684a654c614c6a64475673614a39627142767746703344326b35674c6e376e7142474a697066733a2f2f516d6354595056416839647964767166523769447965437333473651783732447a3839366547707a354c514d5a64a26469706673582212206761fd62acf5f69edb626f62cae477dd07cf81fce20160b67b19239229c5c43e64736f6c63430008130033