0x60a0806040523460c857306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c1660b957506001600160401b036002600160401b0319828216016075575b60405161523a90816100cd8239608051818181610eda01526111330152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80806056565b63f92ee8a960e01b8152600490fd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806302329a29146102b45780630efe6a8b146102af57806317070f02146102aa57806317a68dd8146102a5578063183a4f6e146102a05780631c10893f1461029b5780631cd64df4146102965780632569296214610291578063259dff0c1461028c5780632b93e0a2146102875780632de948071461028257806344d00f821461027d5780634a4ee7b1146102785780634f1ef28614610273578063514e62fc1461026e57806351ffb74a1461026957806352d1902d1461026457806354d1f13d1461025f5780635c60da1b1461025a5780635c975abb146102555780636834e3a8146102505780636b8807181461024b578063715018a6146102465780637a29084c146102415780637fb2a0a11461023c5780638b198025146102375780638c80d4e5146102325780638da5cb5b1461022d57806394f649dd14610228578063aa0a050c14610223578063b69b682f1461021e578063c1f09e3014610219578063ca5f767814610214578063df6704481461020f578063e4af8b221461020a578063efc1e71214610205578063f04e283e14610200578063f0edf6aa146101fb578063f2fde38b146101f6578063f8c8765e146101f1578063fc346664146101ec5763fee81cf4146101e7575f80fd5b613582565b612ecf565b612cb7565b612c78565b612a8b565b6128ed565b6122a7565b61226d565b612228565b611d79565b611bc1565b611af2565b611a05565b6116e2565b6115e9565b611544565b611412565b611394565b611319565b6112ba565b611293565b611232565b6111f1565b6111c5565b611181565b611120565b611022565b610fb2565b610e9d565b610e43565b610d90565b610d17565b61098f565b610705565b61068b565b61063c565b6105d8565b6105be565b6104f1565b61049e565b610449565b6102c7565b801515036102c357565b5f80fd5b346102c35760206003193601126102c3576004356102e4816102b9565b6102ec613da5565b1561036f576102f9613df7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b6001600160a01b038116036102c357565b60031960609101126102c35760043561043e81610415565b906024359060443590565b346102c35761045736610426565b909168929eee149b4bd212689130835414610491576020936104859230855561047e613df7565b3333613e4c565b90389055604051908152f35b63ab143c065f526004601cfd5b346102c3576104ac36610426565b68929eee149b4bd212689291929030825414610491576104df6104e6916020953085556104d7613df7565b853333613e4c565b80936140d2565b389055604051908152f35b346102c35760206003193601126102c3576001600160a01b0360043561051681610415565b61051e613dc0565b168015610594577fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649105817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f2768c62492a0ab17bb4fd74f18e51a421e2a8e30c0d05ec389cd5609e91b4d5e5f80a2005b60046040517fd92e233d000000000000000000000000000000000000000000000000000000008152fd5b60206003193601126102c3576105d66004353361480b565b005b60406003193601126102c3576004356105f081610415565b6105f8613dc0565b638b78c6d8600c525f526020600c20602435815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3005b346102c35760406003193601126102c357602061067760043561065e81610415565b602435918291638b78c6d8600c525f526020600c205490565b1614604051908152f35b5f9103126102c357565b5f6003193601126102c35763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b9181601f840112156102c35782359167ffffffffffffffff83116102c3576020808501948460051b0101116102c357565b346102c35760606003193601126102c357600467ffffffffffffffff81358181116102c35761073790369084016106d4565b90916024359081116102c35761075090369085016106d4565b936044359461075e86610415565b610766613dc0565b8084036109075792936001600160a01b03861693905f5b86811061078657005b6107996107948289856135e5565b6135fa565b6107a76107948386896135e5565b9060408181517fbcdbc94700000000000000000000000000000000000000000000000000000000815288818c81806107ff8a602098899784019060209093929360408301946001600160a01b03809216845216910152565b03915afa918215610902575f926108d5575b5050156108ad5750896108746001949361085e6108a7946001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910860205260405f2090565b906001600160a01b03165f5260205260405f2090565b906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b0161077d565b8690517fc94f7a9a000000000000000000000000000000000000000000000000000000008152fd5b6108f49250803d106108fb575b6108ec81836129a0565b810190613604565b5f80610811565b503d6108e2565b613619565b506040517f3e31cc61000000000000000000000000000000000000000000000000000000008152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c60609101126102c35760a490565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefc60609101126102c35761010490565b346102c3576101606003193601126102c35760048035906109af82610415565b602435906109bc82610415565b60443560643593608435936109d036610930565b6109d93661095f565b68929eee149b4bd212689630885414610d0b573088556109f7613df7565b610a31846001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910260205260405f2090565b54926001600160a01b0397888716916040998a51917f38d52e0f0000000000000000000000000000000000000000000000000000000090818452602093848187818a5afa80156109025784915f91610cee575b501690610a908161429c565b823b156102c35787928f8f818f945f968c8f92610b1c938a968f98519c8d9b8c9a8b997fd505accf000000000000000000000000000000000000000000000000000000008b528801359701359589019360ff929897969360c0969260e087019a6001600160a01b0380921688521660208701526040860152606085015216608083015260a08201520152565b03925af19081610cd5575b50610cb8578b5190815282818581885afa91821561090257610b9d928a87928f87955f94610c89575b50518096819582947fdd62ed3e0000000000000000000000000000000000000000000000000000000084528b84019060209093929360408301946001600160a01b03809216845216910152565b0392165afa908115610902578a925f92610c5c575b505010610c355750928492610bd3928b89610c1f9a98610c319e9a98614905565b610c0d816001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910260205260405f2090565b610c178154613651565b905580613e4c565b38909255519081529081906020820190565b0390f35b88517fb78cb0dd000000000000000000000000000000000000000000000000000000008152fd5b610c7b9250803d10610c82575b610c7381836129a0565b8101906137e3565b5f80610bb2565b503d610c69565b610caa919450863d8811610cb1575b610ca281836129a0565b810190613806565b925f610b50565b503d610c98565b50505050928492610bd3928b89610c1f9a98610c319e9a98614905565b80610ce2610ce89261296b565b80610681565b5f610b27565b610d059150863d8811610cb157610ca281836129a0565b5f610a84565b8663ab143c065f52601cfd5b346102c35760206003193601126102c3576020610d4c600435610d3981610415565b638b78c6d8600c525f526020600c205490565b604051908152f35b9081518082526020808093019301915f5b828110610d73575050505090565b83516001600160a01b031685529381019392810192600101610d65565b346102c3575f6003193601126102c357604051807fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad86491049182548082526020809201935f527fcc963e9281187e610857e988900b0c72937ebb5122acc7f351ae2143b44e4682915f905b828210610e2357610c3185610e0f818903826129a0565b604051918291602083526020830190610d54565b83546001600160a01b031686529485019460019384019390910190610df8565b60406003193601126102c3576105d6600435610e5e81610415565b610e66613dc0565b6024359061480b565b9181601f840112156102c35782359167ffffffffffffffff83116102c357602083818601950101116102c357565b60406003193601126102c357600435610eb581610415565b60243567ffffffffffffffff81116102c357610ed5903690600401610e6f565b9091307f000000000000000000000000000000000000000000000000000000000000000014610fa5576001600160a01b0390610f0f613dc0565b166352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d865afa5103610f9757818391817fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a255610f7a57005b815f926040519485378338925af415610f8f57005b3d5f823e3d90fd5b6355299b496001526004601dfd5b639f03a0265f526004601cfd5b346102c35760406003193601126102c3576020600435610fd181610415565b610feb60243591638b78c6d8600c525f526020600c205490565b161515604051908152f35b60031960609101126102c35760043561100e81610415565b9060243561101b81610415565b9060443590565b346102c35761103036610ff6565b6001600160a01b03929192807fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649106541633036110f6576110a18185166001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156110cc5768929eee149b4bd212689230845414610491576110c7923085556142aa565b389055005b60046040517fb13b4eea000000000000000000000000000000000000000000000000000000008152fd5b60046040517fd04f8cc5000000000000000000000000000000000000000000000000000000008152fd5b346102c3575f6003193601126102c357307f000000000000000000000000000000000000000000000000000000000000000003610fa55760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b5f6003193601126102c35763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b346102c3575f6003193601126102c35760206111e0336136dc565b6001600160a01b0360405191168152f35b346102c3575f6003193601126102c357602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346102c35760206003193601126102c357602061128a60043561125481610415565b6001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910260205260405f2090565b54604051908152f35b346102c35760206003193601126102c35760206111e06004356112b581610415565b6136dc565b5f6003193601126102c3576112cd613dc0565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a355005b346102c35760206003193601126102c35760043561133681610415565b61133e613da5565b6001600160a01b037fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910791167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555f80f35b346102c35760406003193601126102c3576004356113b181610415565b6001600160a01b038181165f9081527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649103602052604090205416156110cc5768929eee149b4bd212689030825414610491576110c790308355602435906140d2565b346102c35760406003193601126102c35760043561142f81610415565b6001600160a01b038181165f8181527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649103602052604090209091602435915416156110cc5768929eee149b4bd21268923084541461049157816114949130865533614383565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201528160448201526020816064815f875af1801561090257611525575b50604080516001600160a01b0384168152602081019290925233917fd92108066c19fd1ca914adf88fe45def4bfb59e8b5df7a7c02c4275cbe3152cb9190a3389055005b61153d9060203d6020116108fb576108ec81836129a0565b505f6114e1565b346102c35761155236610ff6565b6001600160a01b03929192807fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649106541633036110f6576115c38185166001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156110cc5768929eee149b4bd212689230845414610491576110c7923085556144ef565b346102c3575f6003193601126102c35760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927546001600160a01b0360405191168152f35b9081518082526020808093019301915f5b82811061164d575050505090565b83518552938101939281019260010161163f565b92906116799095949295608085526080850190610d54565b6020908481036020860152602080885192838152019701915f5b8281106116c55750505050846116b491846116c2969703604086015261162e565b91606081840391015261162e565b90565b83516001600160a01b031689529781019792810192600101611693565b346102c3576020806003193601126102c3576004803561170181610415565b61173b816001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b54906117468261377f565b926117508361377f565b9261175a8161377f565b955f5b8281106117b9578787610c31886117ac6117a78a6001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b613683565b9260405194859485611661565b6118646117f6866001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910060205260405f2090565b61184f61183c846118378a6001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b6137ce565b90546001600160a01b039160031b1c1690565b6001600160a01b03165f5260205260405f2090565b54906118b66118aa61183c836118378a6001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b6001600160a01b031690565b604084815180937f07a2d13a00000000000000000000000000000000000000000000000000000000825281806118f3898d83019190602083019252565b03915afa93841561090257879486935f916119e8575b50611914858d6137f2565b5261191f848b6137f2565b526119646118aa61183c856118378c6001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b9051938480927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa8015610902576001600160a01b036119c5916001945f916119cb575b50166119b7838c6137f2565b906001600160a01b03169052565b0161175d565b6119e29150863d8811610cb157610ca281836129a0565b5f6119ab565b6119ff9150843d8611610c8257610c7381836129a0565b5f611909565b346102c35760406003193601126102c357600435611a2281610415565b60243590611a2f82610415565b611a37613dc0565b6001600160a01b03908183169283156105945782611a85836001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156110cc57611aca90610874836001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b16907f928c1491037173ffa6782c693f229e11dbb934cb28daf9e2d1fca4b5131ffbf75f80a3005b346102c35760206003193601126102c357600435611b0f81610415565b611b17613da5565b6001600160a01b037fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910a91167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790555f80f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060206116c2928181520190611b6d565b346102c35760406003193601126102c357600435611bde81610415565b60243567ffffffffffffffff81116102c357611bfe903690600401610e6f565b611c06613da5565b68929eee149b4bd212689230845414610491573084557fffffffff00000000000000000000000000000000000000000000000000000000611c47838561381b565b16917f27ea6f2b0000000000000000000000000000000000000000000000000000000083148015611d50575b8015611d27575b15611cfd575f6001600160a01b0381957ff2fde38b00000000000000000000000000000000000000000000000000000000839614611cf0575b611cc26040518095819361385f565b0393165af190611cd061386c565b9115611ce957389055604051908190610c319082611bb0565b5060208101fd5b611cf8613dc0565b611cb3565b60046040517fc55dde3d000000000000000000000000000000000000000000000000000000008152fd5b507f02329a29000000000000000000000000000000000000000000000000000000008314611c7a565b507ff2fde38b000000000000000000000000000000000000000000000000000000008314611c73565b346102c3576003196080813601126102c3576004908135611d9981610415565b6024359167ffffffffffffffff8084116102c35760a08486019285360301126102c3576064359081116102c357611dd39036908601610e6f565b94909268929eee149b4bd21268953087541461221c57308755611df4613da5565b6001600160a01b038092169382611e3b866001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156121f3576040908151907f38d52e0f000000000000000000000000000000000000000000000000000000008252602091828188818b5afa80156109025786915f916121d6575b501697611edd611ed0611ec78b6001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910860205260405f2090565b61184f856135fa565b546001600160a01b031690565b94868616156121ae5791839185938b958b8b9a99985197888080937f70a08231000000000000000000000000000000000000000000000000000000009e8f8352820190611f3790916001600160a01b036020820193169052565b03915afa958615610902575f9661218d575b50611f819596848c611f5d6118aa876135fa565b8d8d8a519b8c9485938493845283019190916001600160a01b036020820193169052565b03915afa968715610902575f9761216e575b508b3b156102c3578b845f8d93611fdc82968b51988997889687957fa5b1a73e000000000000000000000000000000000000000000000000000000008752604435928701613968565b03925af180156109025761215b575b5082518781526001600160a01b038a1689820190815283908290819003602001818e5afa978815610902578a915f99612130575b509083916120599798999a6120366118aa866135fa565b918751998a9485938493845283019190916001600160a01b036020820193169052565b03915afa938415610902577f279cf0e48edd251c8060c231df3357902624d49b62cf6a41f4320588924d3c02986120f4968d945f976120fc575b5050916120bc6120db926120b6606496956120b06118aa866135fa565b9b613a5d565b97613a5d565b60846120e46120ce6024870185613a6a565b9590946044880190613a6a565b97909601613abb565b96519a8b9a169e01359689613ac5565b0390a4389055005b60649594929750926120b66121246120bc93866120db97903d10610c8257610c7381836129a0565b98939596505092612093565b6120599798995090612150859392843d8611610c8257610c7381836129a0565b99989750909161201f565b80610ce26121689261296b565b5f611feb565b612186919750853d8711610c8257610c7381836129a0565b955f611f93565b611f8196506121a890853d8711610c8257610c7381836129a0565b95611f49565b8785517fc94f7a9a000000000000000000000000000000000000000000000000000000008152fd5b6121ed9150843d8611610cb157610ca281836129a0565b5f611e84565b836040517fb13b4eea000000000000000000000000000000000000000000000000000000008152fd5b8263ab143c065f52601cfd5b346102c3575f6003193601126102c35760206001600160a01b037fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad86491065416604051908152f35b346102c3575f6003193601126102c35760206040517f94fb01b7061fcfca7a3e92b7604dda2f7f5f098146840ac40016cda24c3a88598152f35b346102c35760a06003193601126102c3576122c3600435610415565b6024356122cf81610415565b60843567ffffffffffffffff81116102c3576122ef903690600401610e6f565b9190913068929eee149b4bd212685414610491573068929eee149b4bd21268556001600160a01b03908161235781600435166001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156110cc57818316938261239d866001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156110cc576123ac613df7565b6040517f38d52e0f00000000000000000000000000000000000000000000000000000000808252602082600481888235165afa918215610902575f926128cc575b506040519081526020816004818a5afa908115610902575f916128ad575b506124546118aa611ed087841661085e8987166001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910860205260405f2090565b9385851615612883576040517f07a2d13a000000000000000000000000000000000000000000000000000000008082526044356004830152909190602083806024810103818b600435165afa928315610902575f93612861575b506040519081526064356004820152986020908a9060249082905afa988915610902575f99612840575b506124e16129e1565b6001600160a01b03858916168152916001600160a01b038489161660208401526040838101829052606084018b9052517f70a08231000000000000000000000000000000000000000000000000000000008082523060048301529590602081806024810103818d86165afa908115610902575f91612821575b5061256a604435600435336144ef565b604080513380825260443560208301525f9290916004358e16917f6ee63f530864567ac8a1fcce5050111457154b213c6297ffc622603e8497f7b291a46125b6604435600435306142aa565b604080513380825260443560208301525f928201839052906004358d16907f486508c3c40ef7985dcc1f7d43acb1e77e0059505d1f0e6064674ca655a0c82f90606090a4604051878152306004820152602081602481868f165afa91821561090257849261262b925f91612785575b50613a5d565b036127f7576040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b03891660048201526024810192909252602090829060449082905f908d165af18015610902576127d8575b5060405184815230600482015295602087602481878c165afa968715610902575f976127b7575b50803b156102c3576126f4955f8094604051988995869485937f6103b22500000000000000000000000000000000000000000000000000000000855260048501613b10565b03925af1928315610902576020936127a4575b50604051918252306004830152909384916024918391165afa801561090257612736925f916127855750613a5d565b91821061275b5761274c91606435913033613e4c565b503868929eee149b4bd2126855005b60046040517fd93fc0fd000000000000000000000000000000000000000000000000000000008152fd5b61279e915060203d602011610c8257610c7381836129a0565b5f612625565b80610ce26127b19261296b565b5f612707565b6127d191975060203d602011610c8257610c7381836129a0565b955f6126af565b6127f09060203d6020116108fb576108ec81836129a0565b505f612688565b60046040517f56783f53000000000000000000000000000000000000000000000000000000008152fd5b61283a915060203d602011610c8257610c7381836129a0565b5f61255a565b61285a91995060203d602011610c8257610c7381836129a0565b975f6124d8565b602091935061287c90823d8411610c8257610c7381836129a0565b92906124ae565b60046040517fc94f7a9a000000000000000000000000000000000000000000000000000000008152fd5b6128c6915060203d602011610cb157610ca281836129a0565b5f61240b565b6128e691925060203d602011610cb157610ca281836129a0565b905f6123ed565b60206003193601126102c35760043561290581610415565b61290d613dc0565b63389a75e1600c52805f526020600c209081544211612931575f6105d69255614322565b636f5e88185f526004601cfd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161297f57604052565b61293e565b6040810190811067ffffffffffffffff82111761297f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761297f57604052565b604051906080820182811067ffffffffffffffff82111761297f57604052565b67ffffffffffffffff811161297f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156102c357803590612a5282612a01565b92612a6060405194856129a0565b828452602083830101116102c357815f926020809301838601378301015290565b600511156102c357565b346102c35760806003193601126102c357600435612aa881610415565b67ffffffffffffffff6024358181116102c357612ac9903690600401612a3b565b6044359182116102c357612bc0612b5991612aeb612bc5943690600401612a3b565b612b94612b8960643592612afe84612a81565b612b06613da5565b6040519687957f8420ce990000000000000000000000000000000000000000000000000000000060208801523060248801526001600160a01b03809b16604488015260a0606488015260c4870190611b6d565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc868303016084870152611b6d565b9160a4840190613956565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826129a0565b614588565b90612bcf82613b51565b8116612c39612c0e826001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b60017fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b610c316040519283927f2cd7a531712f8899004c782d9607e0886d1dbc91bfac7be88dadf6750d9e14195f80a26001600160a01b031682526020820190565b60206003193601126102c357600435612c9081610415565b612c98613dc0565b8060601b15612caa576105d690614322565b637448fbae5f526004601cfd5b346102c35760806003193601126102c357600435612cd481610415565b60243590612ce182610415565b604435612ced81610415565b60643590612cfa82610415565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff60ff8660401c1615951680159081612ec7575b6001149081612ebd575b159081612eb4575b50612e8a57612dad9385612da47ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b612e2e57613c36565b612db357005b612dff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b612e857ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b613c36565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f612d4b565b303b159150612d43565b869150612d39565b346102c35760806003193601126102c3576004803590612eee82610415565b60243590612efb82610415565b60443568929eee149b4bd21268933085541461221c573085556001600160a01b038082169381612f5b866001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b54161561355a57612f6a613df7565b6040908151967f38d52e0f0000000000000000000000000000000000000000000000000000000094858952602091828a85818c5afa998a15610902575f9a613539575b5085169883838b8751928380928c82525afa90811561090257879182915f9161351c575b50169116036134f457613055828a6130136118aa7fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910a546001600160a01b031690565b875180809581947f6b8807180000000000000000000000000000000000000000000000000000000083528a83019190916001600160a01b036020820193169052565b03915afa80156109025786915f916134d7575b5016156134af57835194868652828685818c5afa958615610902575f96613490575b5084519183837f70a0823100000000000000000000000000000000000000000000000000000000988982528185816130d4308c83019190916001600160a01b036020820193169052565b0392165afa928315610902575f93613471575b5085519287845284848d818061310f338c83019190916001600160a01b036020820193169052565b03915afa9384156109025786928b915f9661344c575b5090816131368261318994336144ef565b8d8a5130917f6ee63f530864567ac8a1fcce5050111457154b213c6297ffc622603e8497f7b2339280613180883383602090939291936001600160a01b0360408201951681520152565b0390a4306142aa565b865133808252602082018c90525f604083015230918d907f486508c3c40ef7985dcc1f7d43acb1e77e0059505d1f0e6064674ca655a0c82f90606090a4848b8851938480928d82525afa918215610902575f9261342d575b5084875180938a8252818681613209308d83019190916001600160a01b036020820193169052565b0392165afa801561090257613224925f916134165750613a5d565b968551908152838186818d5afa91821561090257613294928c8a9287945f936133f5575b505f908a518097819682957f095ea7b30000000000000000000000000000000000000000000000000000000084528d8401602090939291936001600160a01b0360408201951681520152565b0393165af18015610902576133d8575b5083517fbc157ac1000000000000000000000000000000000000000000000000000000008152838101878152336020820152606435604082015290959083908790819003606001815f8e5af1958615610902575f966133b9575b5084519081523384820190815283908290819060200103818d5afa90811561090257613332935f9261339c575b5050613a5d565b83036133755750519283526020830152604082015233907f423b53102adc96bdca1912c080d05033fc81552dbbbdfabf80291ba824421a299080606081016120f4565b90517ff15ed214000000000000000000000000000000000000000000000000000000008152fd5b6133b29250803d10610c8257610c7381836129a0565b5f8061332b565b6133d1919650833d8511610c8257610c7381836129a0565b945f6132fe565b6133ee90833d85116108fb576108ec81836129a0565b505f6132a4565b5f91935061340f90863d8811610cb157610ca281836129a0565b9290613248565b61279e9150863d8811610c8257610c7381836129a0565b613445919250853d8711610cb157610ca281836129a0565b905f6131e1565b6131899291965061346990883d8a11610c8257610c7381836129a0565b959091613125565b613489919350843d8611610c8257610c7381836129a0565b915f6130e7565b6134a8919650833d8511610cb157610ca281836129a0565b945f61308a565b8284517fd28267a3000000000000000000000000000000000000000000000000000000008152fd5b6134ee9150843d8611610cb157610ca281836129a0565b5f613068565b8284517f83c1010a000000000000000000000000000000000000000000000000000000008152fd5b6135339150863d8811610cb157610ca281836129a0565b5f612fd1565b86919a5061355390843d8611610cb157610ca281836129a0565b9990612fad565b6040517fb13b4eea000000000000000000000000000000000000000000000000000000008152fd5b346102c35760206003193601126102c35760043561359f81610415565b63389a75e1600c525f52602080600c2054604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156135f55760051b0190565b6135b8565b356116c281610415565b908160209103126102c357516116c2816102b9565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461367e5760010190565b613624565b90604051918281549182825260209260208301915f5260205f20935f905b8282106136b9575050506136b7925003836129a0565b565b85546001600160a01b0316845260019586019588955093810193909101906136a1565b613721906001600160a01b039182916001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b54169060018214801561375f575b613737575090565b90507fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649105541690565b50811561372f565b67ffffffffffffffff811161297f5760051b60200190565b9061378982613767565b61379660405191826129a0565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06137c48294613767565b0190602036910137565b80548210156135f5575f5260205f2001905f90565b908160209103126102c3575190565b80518210156135f55760209160051b010190565b908160209103126102c357516116c281610415565b7fffffffff00000000000000000000000000000000000000000000000000000000903581811693926004811061385057505050565b60040360031b82901b16169150565b908092918237015f815290565b3d15613896573d9061387d82612a01565b9161388b60405193846129a0565b82523d5f602084013e565b606090565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156102c357016020813591019167ffffffffffffffff82116102c35781360383136102c357565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060058210156139635752565b613929565b90926116c295939492946001600160a01b03809116835260806020840152853561399181610415565b16608083015260806139fa6139bd6139ac602089018961389b565b60a0808801526101208701916138eb565b6139ca604089018961389b565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808784030160c08801526138eb565b95613a166060820135613a0c81612a81565b60e0860190613956565b0135610100830152604082015260608185039101526138eb565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161367e57565b9190820391821161367e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102c3570180359067ffffffffffffffff82116102c3576020019181360383136102c357565b356116c281612a81565b9491613b0193613b0c95613af39260a099949c9b9a9c8952602089015260c0604089015260c08801916138eb565b9185830360608701526138eb565b956080830190613956565b0152565b60a09060606116c295936001600160a01b038082511684526020820151166020840152604081015160408401520151606082015281608082015201916138eb565b7fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad86491049081546801000000000000000081101561297f57600181018084558110156135f5576136b7925f527fcc963e9281187e610857e988900b0c72937ebb5122acc7f351ae2143b44e468201906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b908154916801000000000000000083101561297f5782613c179160016136b7950181556137ce565b9091906001600160a01b038084549260031b9316831b921b1916179055565b9192613ce190337fffffffffffffffffffffffffffffffffffffffffffffffffffffffff7487392755335f7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3613c8d614b1d565b613c95614b1d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055614850565b6001600160a01b0380911680158015613d9b575b610594577fffffffffffffffffffffffff000000000000000000000000000000000000000092827fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad86491069116848254161790557fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910590838254161790557fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649107921690825416179055565b5081831615613cf5565b638b78c6d8600c52335f5260016020600c20541615613dc057565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543303613dea57565b6382b429005f526004601cfd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416613e2257565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b90939192936001600160a01b03928385169584613e99886001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910360205260405f2090565b5416156110cc57613ea8613df7565b60405180977f6e553f65000000000000000000000000000000000000000000000000000000008252815f81613efa6020988997600484019092916001600160a01b036020916040840195845216910152565b03925af1958615610902575f9661402a575b508510614000578492613f496118aa7fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649107546001600160a01b031690565b908116613f5d575b5050916116c292614383565b908092935060405180927f60cfb2040000000000000000000000000000000000000000000000000000000082528180613f9860048201614049565b03915afa918215610902575f92613fe3575b5050613fb95782905f80613f51565b60046040517fbf2af50b000000000000000000000000000000000000000000000000000000008152fd5b613ff99250803d106108fb576108ec81836129a0565b5f80613faa565b60046040517ff15ed214000000000000000000000000000000000000000000000000000000008152fd5b614042919650823d8411610c8257610c7381836129a0565b945f613f0c565b60208082016020835260407fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910493845480935201925f527fcc963e9281187e610857e988900b0c72937ebb5122acc7f351ae2143b44e4682915f905b8282106140b2575050505090565b83546001600160a01b0316855293840193600193840193909101906140a4565b908015614272576001600160a01b03821691816141238261085e336001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910060205260405f2090565b5410614000576141678161085e336001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910060205260405f2090565b614172838254613a5d565b90556040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526020816044815f885af1801561090257614253575b506141fb8161085e336001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910060205260405f2090565b5415614243575b50604080516001600160a01b0384168152602081019290925233917ffbbbd9facbad6d22caedbbc41b96121e94e21eb0fdc25f3279c686af9aa1c9f79190a3565b61424d9033614652565b5f614202565b61426b9060203d6020116108fb576108ec81836129a0565b505f6141bc565b60046040517f9811e0c7000000000000000000000000000000000000000000000000000000008152fd5b3560ff811681036102c35790565b6064602092935f6001600160a01b03809660405197889687957fba0876520000000000000000000000000000000000000000000000000000000087526004870152166024850152306044850152165af18015610902576143075750565b61431f9060203d602011610c8257610c7381836129a0565b50565b6001600160a01b03167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff748739278181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a355565b9190820180921161367e57565b6001600160a01b03811615610594578215614272576143d68261085e836001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910060205260405f2090565b541561442a575b6144269161085e61441e926001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910060205260405f2090565b918254614376565b9055565b6020614466826001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b5410156144c5578161085e826144bb614426956144b661441e966001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b613bef565b92505091506143dd565b60046040517f63923f0e000000000000000000000000000000000000000000000000000000008152fd5b918015614272576001600160a01b038316805f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad8649100806020526145468460405f20906001600160a01b03165f5260205260405f2090565b5491828411614000575f526020528181036145758460405f20906001600160a01b03165f5260205260405f2090565b551461457f575050565b6136b791614652565b60405190610513908183019083821067ffffffffffffffff83111761297f5760406145c4928594614cf286393081528160208201520190611b6d565b03905ff08015610902576001600160a01b031690565b80548015614625577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019061460f82826137ce565b6001600160a01b0382549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b9061468d826001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b54905f905b82821061470c575b50146146e2576146dd6136b7916001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b6145da565b60046040517fdee790fb000000000000000000000000000000000000000000000000000000008152fd5b92919061474d81611837856001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b906001600160a01b0390548187169260031b1c161461477157600101909192614692565b909192506148056147c761183c6147b8866001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b6147c186613a30565b906137ce565b613c1783611837876001600160a01b03165f527fa850f9cb190d34eca968aeee8c951b4765e62744d7c13847a3ad392ad864910160205260405f2090565b5f61469a565b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b638b78c6d8600c525f526020600c206001815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b604051906148a082612984565b600f82527f4b6172616b5f5661756c745f53757000000000000000000000000000000000006020830152565b604051906148d982612984565b600282527f76310000000000000000000000000000000000000000000000000000000000006020830152565b909594939291428410614af357614ab595614a8d92614a9992614a49614929614893565b97614a3d89516020809b01209561493e6148cc565b8051908c0120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818f01908152602081019a909a5290890191909152466060890152306080890152968760a0820103976149c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0998a81018352826129a0565b519020996040519586948d8601988993917fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060b49694927f94fb01b7061fcfca7a3e92b7604dda2f7f5f098146840ac40016cda24c3a8859875260601b16602086015260348501526054840152607483015260948201520190565b038481018352826129a0565b519020604051938491878301968790916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b039081018352826129a0565b51902090614aa68361429c565b90604084013593013591614b76565b6001600160a01b03918216911603614ac957565b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b60046040517faf04a38e000000000000000000000000000000000000000000000000000000008152fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614b4c57565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b916116c29391614b8593614b8e565b90929192614c1a565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614c05579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610902575f516001600160a01b03811615614bfb57905f905f90565b505f906001905f90565b5050505f9160039190565b6004111561396357565b614c2381614c10565b80614c2c575050565b614c3581614c10565b60018103614c675760046040517ff645eedf000000000000000000000000000000000000000000000000000000008152fd5b614c7081614c10565b60028103614caa576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101839052602490fd5b80614cb6600392614c10565b14614cbe5750565b6040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004810191909152602490fdfe60a06040908082526105138038038091610019828561028f565b8339810182828203126101e05761002f826102c6565b60208084015191939091906001600160401b0382116101e057019180601f840112156101e0578251610060816102da565b9361006d8751958661028f565b818552838501928483830101116101e057815f9285809301855e85010152833b1561026f577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038681169182179092558651635c60da1b60e01b8082529193928582600481885afa918215610265575f9261022e575b50813b156102155750508651837f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a28551156101f557508390600488518095819382525afa9182156101eb575f926101a7575b505f8091610184955190845af4903d1561019e573d610169816102da565b906101768851928361028f565b81525f81943d92013e6102f5565b505b608052516101ba908161035982396080518160450152f35b606092506102f5565b9391508284813d83116101e4575b6101bf818361028f565b810103126101e0575f80916101d6610184966102c6565b939550915061014b565b5f80fd5b503d6101b5565b86513d5f823e3d90fd5b945050505050346102065750610186565b63b398979f60e01b8152600490fd5b8851634c9c8ce360e01b81529116600482015260249150fd5b9091508581813d831161025e575b610246818361028f565b810103126101e057610257906102c6565b905f6100f6565b503d61023c565b89513d5f823e3d90fd5b8451631933b43b60e21b81526001600160a01b0385166004820152602490fd5b601f909101601f19168101906001600160401b038211908210176102b257604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101e057565b6001600160401b0381116102b257601f01601f191660200190565b9061031c575080511561030a57805190602001fd5b604051630a12f52160e11b8152600490fd5b8151158061034f575b61032d575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b1561032556fe6080806040527f5c60da1b00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561010b575f9161007b575b50610167565b905060203d602011610104575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f82011682019180831067ffffffffffffffff8411176100d7576100d19260405201610116565b5f610075565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610088565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8060209101126101635760805173ffffffffffffffffffffffffffffffffffffffff811681036101635790565b5f80fd5b5f8091368280378136915af43d5f803e15610180573d5ff35b3d5ffdfea2646970667358221220e7b9552b73789ab6c6f59e9b71c3088d2a218a570c6e8a61e340f99da2d0eac464736f6c63430008190033a2646970667358221220c6dfa22d789df9128ddb7bdcb036dadba05858f5a1a39202d7a3803c2f84c4ce64736f6c63430008190033