Deployed Bytecode Bytecode Opcodes Copy
0x608060405260043610610154575f3560e01c806302f1b67c1461015f57806307b3fa59146101805780631ded23611461019f578063255a86b0146101d45780632f2eec37146101f257806336118b52146102325780633ccdbb28146102515780634124f48e1461027057806349eb333414610283578063600eee8c146102b657806362308e85146102c9578063715018a6146102fc57806372134fd41461031057806381ad347b146103235780638da5cb5b1461033657806391dd73461461034a57806394d8572a14610376578063a27d5a25146103a9578063a61cf0d4146103c8578063ad5c4648146103e7578063b31738d61461041a578063ca2062c214610458578063d106dc20146104c9578063d7e8df64146104e8578063d936547e14610507578063ea598cb014610535578063f1489ecd14610554578063f2fde38b14610573578063fa461e3314610592575f5ffd5b3661015b57005b5f5ffd5b34801561016a575f5ffd5b5061017e6101793660046147ec565b6105b1565b005b34801561018b575f5ffd5b5061017e61019a36600461486a565b610792565b3480156101aa575f5ffd5b506101be6101b93660046148a8565b610a92565b6040516101cb9190614924565b60405180910390f35b3480156101df575f5ffd5b506004545b6040519081526020016101cb565b3480156101fd575f5ffd5b506102257f0000000000000000000000001f7d7550b1b028f7571e69a784071f0205fd2efa81565b6040516101cb919061497c565b34801561023d575f5ffd5b5061017e61024c366004614990565b610af8565b34801561025c575f5ffd5b5061017e61026b3660046149b3565b610bb6565b6101e461027e3660046149e7565b610c99565b34801561028e575f5ffd5b506102257f0000000000000000000000008bceaa40b9acdfaedf85adf4ff01f5ad6517937f81565b6101e46102c43660046149f9565b6110ab565b3480156102d4575f5ffd5b506102257f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e4095181565b348015610307575f5ffd5b5061017e61130a565b6101e461031e366004614a9d565b61131d565b6101e4610331366004614b13565b611538565b348015610341575f5ffd5b50610225611a8f565b348015610355575f5ffd5b50610369610364366004614b87565b611a9d565b6040516101cb9190614be7565b348015610381575f5ffd5b506102257f000000000000000000000000000000000000000000000000000000000000000081565b3480156103b4575f5ffd5b5061017e6103c3366004614bf9565b611c33565b3480156103d3575f5ffd5b506102256103e2366004614c14565b611cd8565b3480156103f2575f5ffd5b506102257f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad7381565b348015610425575f5ffd5b50610448610434366004614bf9565b60036020525f908152604090205460ff1681565b60405190151581526020016101cb565b348015610463575f5ffd5b506104b8610472366004614bf9565b60056020525f908152604090205460ff8082169161010081048216916201000082046001600160a01b031691600160b01b810490911690600160b81b900462ffffff1685565b6040516101cb959493929190614c2b565b3480156104d4575f5ffd5b5061017e6104e3366004614c95565b611d00565b3480156104f3575f5ffd5b50610225610502366004614c14565b611e4d565b348015610512575f5ffd5b50610448610521366004614bf9565b60016020525f908152604090205460ff1681565b348015610540575f5ffd5b5061017e61054f366004614c14565b611e5c565b34801561055f575f5ffd5b5061017e61056e366004614d05565b611ee1565b34801561057e575f5ffd5b5061017e61058d366004614bf9565b611fb9565b34801561059d575f5ffd5b5061017e6105ac366004614d6f565b611ff6565b6105b9612278565b5f6105e57f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738484610a92565b80519091506001600160a01b031661063d577f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738360405163c4b4593d60e01b8152600401610634929190614db1565b60405180910390fd5b6040518060a00160405280600115158152602001826020015115158152602001825f01516001600160a01b0316815260200182608001516001811115610685576106856148f0565b815260a083015162ffffff166020918201526001600160a01b038086165f90815260058352604090819020845181549486015192860151909316620100000262010000600160b01b03199215156101000261ff00199415159490941661ffff1990951694909417929092179081168317825560608401519192839160ff60b01b1990911662010000600160b81b031990911617600160b01b83600181111561072f5761072f6148f0565b021790555060809190910151815462ffffff909116600160b81b0262ffffff60b81b19909116179055805160208201516040516001600160a01b038616925f5160206155ea5f395f51905f529261078592614dcb565b60405180910390a2505050565b61079a612278565b6107a560045f6146d8565b5f5b81811015610a5a575f8383838181106107c2576107c2614de6565b90506020020160208101906107d79190614bf9565b90506001600160a01b038116158061082057507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316816001600160a01b0316145b1561084057806040516368c0ec6d60e11b8152600401610634919061497c565b5f61086c7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73835f610a92565b80519091506001600160a01b03166108bb577f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738260405163c4b4593d60e01b8152600401610634929190614db1565b6040518060a00160405280600115158152602001826020015115158152602001825f01516001600160a01b0316815260200182608001516001811115610903576109036148f0565b815260a083015162ffffff166020918201526001600160a01b038085165f90815260058352604090819020845181549486015192860151909316620100000262010000600160b01b03199215156101000261ff00199415159490941661ffff1990951694909417929092179081168317825560608401519192839160ff60b01b1990911662010000600160b81b031990911617600160b01b8360018111156109ad576109ad6148f0565b021790555060809190910151815462ffffff909116600160b81b0262ffffff60b81b19909116179055600480546001810182555f919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0384166001600160a01b03199091168117909155815160208301516040515f5160206155ea5f395f51905f5292610a48929091614dcb565b60405180910390a250506001016107a7565b506040518181527f25200b160733e6f0977d7496b6770a9eb9d6fa10924a2f0a3cadb9072e97bedf9060200160405180910390a15050565b610a9a6146f3565b5f60ff83161580610aac5750600c8316155b90508080610abc57506004831615155b15610acf57610acc8585846122aa565b91505b8080610add57506008831615155b15610af057610aed85858461247c565b91505b509392505050565b610b00612278565b815f03610b0b574791505b5f816001600160a01b0316836040515f6040518083038185875af1925050503d805f8114610b54576040519150601f19603f3d011682016040523d82523d5f602084013e610b59565b606091505b5050905080610b7b57604051630ca79afd60e01b815260040160405180910390fd5b816001600160a01b03167f05af21d7340bf49fde03a32c3bcc785015c94acd83531fc6dfbfb93a24c364ca8460405161078591815260200190565b610bbe612278565b815f03610c33576040516370a0823160e01b81526001600160a01b038416906370a0823190610bf190309060040161497c565b602060405180830381865afa158015610c0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c309190614dfa565b91505b610c476001600160a01b038416828461252e565b826001600160a01b0316816001600160a01b03167f401f439d865a766757ec78675925bd67198d5e78805aa41691b34b5d6a6cbbe684604051610c8c91815260200190565b60405180910390a3505050565b5f610ca261255f565b335f9081526001602052604090205460ff16610cd35733604051636f8bf18b60e11b8152600401610634919061497c565b7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b0316610d2a575f610d0f6020840184614bf9565b60405163c4b4593d60e01b8152600401610634929190614db1565b5f610d386020840184614bf9565b6001600160a01b031603610d5f57604051637401d93160e01b815260040160405180910390fd5b5f610d706040840160208501614bf9565b6001600160a01b0316148015610d985750610d916060830160408401614e11565b62ffffff16155b15610db65760405163ba06fa7d60e01b815260040160405180910390fd5b81608001355f03610dda5760405163990965c160e01b815260040160405180910390fd5b610deb610100830160e08401614e40565b610e02906001600160801b03166080840135614e6f565b471015610e225760405163d8c96a0760e01b815260040160405180910390fd5b6040805160a081019091525f80825290602080820190610e4490860186614bf9565b6001600160a01b03168152602001610e626060860160408701614e11565b62ffffff168152602001610e7c6080860160608701614e90565b60020b8152602001846020016020810190610e979190614bf9565b6001600160a01b0316905290505f610eb56040850160208601614bf9565b6001600160a01b031614610f0257610f02610ed66040850160208601614bf9565b82604051602001610ee79190614eee565b6040516020818303038152906040528051906020012061257a565b5f80610f42610f146020870187614bf9565b60a0870135610f2b61016089016101408a01614f0d565b610f3d6101808a016101608b01614f0d565b612660565b90925090505f610f59610100870160e08801614e40565b6001600160801b03161115610fbf57610fbf8360015f610f7c60208a018a614bf9565b610f8d6101008b0160e08c01614e40565b6001600160801b0316610fa86101208c016101008d01614f37565b610fba6101408d016101208e01614f37565b612748565b5f80610fd160e0880160c08901614bf9565b6001600160a01b031614610ff457610fef60e0870160c08801614bf9565b610ff6565b335b90506110188460016080890135865f61101260208d018d614bf9565b8761294c565b9450811580159061102857508185115b15611046576040516310d2d1a160e01b815260040160405180910390fd5b6001600160a01b03811661105d6020880188614bf9565b6001600160a01b0316336001600160a01b03165f5160206155ca5f395f51905f52896080013589604051611092929190614f52565b60405180910390a4505050506110a6612a72565b919050565b5f6110b461255f565b335f9081526001602052604090205460ff166110e55733604051636f8bf18b60e11b8152600401610634919061497c565b6001600160a01b038816158061112c57507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316886001600160a01b0316145b1561114a57604051637401d93160e01b815260040160405180910390fd5b5f83900361116b576040516348e0555160e11b815260040160405180910390fd5b865f0361118b5760405163990965c160e01b815260040160405180910390fd5b5f61119889878986612a7f565b90506111ac6111a7858a614f60565b612b03565b5f5b848110156112c3575f808787848181106111ca576111ca614de6565b90506020020160208101906111df9190614bf9565b6001600160a01b031614611219578686838181106111ff576111ff614de6565b90506020020160208101906112149190614bf9565b61121b565b335b90505f611232845f01518d8d876020015186612c18565b905083604001515f1415801561124b5750836040015181115b15611269576040516310d2d1a160e01b815260040160405180910390fd5b6112738186614e6f565b9450816001600160a01b03168c6001600160a01b0316336001600160a01b03165f5160206155ca5f395f51905f528e856040516112b1929190614f52565b60405180910390a450506001016111ae565b506040516001600160a01b038a16905f51602061560a5f395f51905f52906112ee9087908690614f52565b60405180910390a2506112ff612a72565b979650505050505050565b611312612278565b61131b5f612ce8565b565b5f61132661255f565b335f9081526001602052604090205460ff166113575733604051636f8bf18b60e11b8152600401610634919061497c565b6001600160a01b038716158061139e57507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316876001600160a01b0316145b156113bc57604051637401d93160e01b815260040160405180910390fd5b5f8290036113dd576040516348e0555160e11b815260040160405180910390fd5b855f036113fd5760405163990965c160e01b815260040160405180910390fd5b5f6114088886612d37565b90506114176111a78489614f60565b5f5b838110156114f2575f8086868481811061143557611435614de6565b905060200201602081019061144a9190614bf9565b6001600160a01b0316146114845785858381811061146a5761146a614de6565b905060200201602081019061147f9190614bf9565b611486565b335b90505f611496848c8c8c86612c18565b90506114a28186614e6f565b9450816001600160a01b03168b6001600160a01b0316336001600160a01b03165f5160206155ca5f395f51905f528d856040516114e0929190614f52565b60405180910390a45050600101611419565b506040516001600160a01b038916905f51602061560a5f395f51905f529061151d9086908690614f52565b60405180910390a25061152e612a72565b9695505050505050565b5f61154161255f565b335f9081526001602052604090205460ff166115725733604051636f8bf18b60e11b8152600401610634919061497c565b7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03166115bd576115b06040830160208401614bf9565b610d0f6020840184614bf9565b5f6115cb6020840184614bf9565b6001600160a01b0316036115f257604051637401d93160e01b815260040160405180910390fd5b5f6116036060840160408501614bf9565b6001600160a01b03160361162a5760405163ba06fa7d60e01b815260040160405180910390fd5b611638610180830183614f77565b90505f03611659576040516348e0555160e11b815260040160405180910390fd5b8160a001355f0361167d5760405163990965c160e01b815260040160405180910390fd5b5f8061168f6040850160208601614bf9565b6001600160a01b0316146116b2576116ad6040840160208501614bf9565b6116d4565b7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad735b90506116e36020840184614bf9565b6001600160a01b0316816001600160a01b03160361171457604051636a83473560e01b815260040160405180910390fd5b5f61175b6117256020860186614bf9565b836117366080880160608901614e11565b61174660a0890160808a01614e90565b61175660608a0160408b01614bf9565b612fda565b509050611771610ed66060860160408701614bf9565b6117876117826101a0860186614fbc565b6130c5565b5f806117c26117996020880188614bf9565b60c08801356117b06101608a016101408b01614f0d565b610f3d6101808b016101608c01614f0d565b90925090505f6117d6610180880188614f77565b905090506117e2614728565b7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316866001600160a01b031603611837576118328661182d8460a08c0135614f60565b613228565b611903565b6001600160a01b038087165f90815260056020908152604091829020825160a081018452815460ff80821615158352610100820481161515948301949094526201000081049095169381019390935291926060840191600160b01b9091041660018111156118a7576118a76148f0565b60018111156118b8576118b86148f0565b81529054600160b81b900462ffffff1660209091015280519091506118f257856040516368c0ec6d60e11b8152600401610634919061497c565b6119036111a78360a08b0135614f60565b5f5b82811015611a44575f8061191d6101808c018c614f77565b8481811061192d5761192d614de6565b90506020020160208101906119429190614bf9565b6001600160a01b0316146119885761195e6101808b018b614f77565b8381811061196e5761196e614de6565b90506020020160208101906119839190614bf9565b61198a565b335b90505f6119ac888a61199f60208f018f614bf9565b8e60a001358b89886132f6565b905085158015906119bc57508581115b156119da576040516310d2d1a160e01b815260040160405180910390fd5b6119e4818b614e6f565b99506001600160a01b0382166119fd60208d018d614bf9565b6001600160a01b0316336001600160a01b03165f5160206155ca5f395f51905f528e60a0013585604051611a32929190614f52565b60405180910390a45050600101611905565b50611a526020890189614bf9565b6001600160a01b03165f51602061560a5f395f51905f528389604051611a79929190614f52565b60405180910390a25050505050506110a6612a72565b5f546001600160a01b031690565b6060336001600160a01b037f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409511614611ae85760405163570c108560e11b815260040160405180910390fd5b5f611af58385018561508f565b90505f7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b031663f3cd914c835f015160405180606001604052808660200151151581526020018660400151611b5090615185565b81526020018660200151611b8257611b7d600173fffd8963efd1fc6a506488495d951d5263988d2661519f565b611b92565b611b926401000276a360016151be565b6001600160a01b03168152506040518363ffffffff1660e01b8152600401611bbb9291906151dd565b6020604051808303815f875af1158015611bd7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bfb9190614dfa565b9050611c0782826133f5565b604051602001611c1991815260200190565b604051602081830303815290604052925050505b92915050565b611c3b612278565b6001600160a01b03811615801590611c6b57506001600160a01b0381165f9081526003602052604090205460ff16155b611c73575f5ffd5b6001600160a01b03165f818152600360205260408120805460ff191660019081179091556002805491820181559091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169091179055565b60048181548110611ce7575f80fd5b5f918252602090912001546001600160a01b0316905081565b611d08612278565b6040518060a001604052806001151581526020018415158152602001856001600160a01b03168152602001836001811115611d4557611d456148f0565b815262ffffff83166020918201526001600160a01b038088165f90815260058352604090819020845181549486015192860151909316620100000262010000600160b01b03199215156101000261ff00199415159490941661ffff1990951694909417929092179081168317825560608401519192839160ff60b01b1990911662010000600160b81b031990911617600160b01b836001811115611deb57611deb6148f0565b021790555060809190910151815462ffffff909116600160b81b0262ffffff60b81b199091161790556040516001600160a01b038616905f5160206155ea5f395f51905f5290611e3e9087908790614dcb565b60405180910390a25050505050565b60028181548110611ce7575f80fd5b611e64612278565b805f03611e6e5750475b7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015611ec7575f5ffd5b505af1158015611ed9573d5f5f3e3d5ffd5b505050505050565b611ee9612278565b5f5b83811015611f4d576001805f878785818110611f0957611f09614de6565b9050602002016020810190611f1e9190614bf9565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611eeb565b505f5b81811015611fb2575f60015f858585818110611f6e57611f6e614de6565b9050602002016020810190611f839190614bf9565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101611f50565b5050505050565b611fc1612278565b6001600160a01b038116611fea575f604051631e4fbdf760e01b8152600401610634919061497c565b611ff381612ce8565b50565b5f8061200483850185615227565b9092509050336001600160a01b038216146120325760405163570c108560e11b815260040160405180910390fd5b5f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120939190615253565b90505f826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120f69190615253565b90505f836001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612135573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612159919061526e565b6002549091505f805b8281101561222157866001600160a01b03166002828154811061218757612187614de6565b5f91825260209091200154604051630b4c774160e11b81526001600160a01b0390911690631698ee82906121c3908a908a908a90600401615289565b602060405180830381865afa1580156121de573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122029190615253565b6001600160a01b0316036122195760019150612221565b600101612162565b508061224457858660405163c4b4593d60e01b8152600401610634929190614db1565b5f5f8c13612252578a612254565b8b5b905061226a6001600160a01b038916338361252e565b505050505050505050505050565b33612281611a8f565b6001600160a01b03161461131b573360405163118cdaa760e01b8152600401610634919061497c565b6122b26146f3565b7f0000000000000000000000008bceaa40b9acdfaedf85adf4ff01f5ad6517937f6001600160a01b03166122e7575080612475565b60405163e6a4390560e01b81525f906001600160a01b037f0000000000000000000000008bceaa40b9acdfaedf85adf4ff01f5ad6517937f169063e6a43905906123379088908890600401614db1565b602060405180830381865afa158015612352573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123769190615253565b90506001600160a01b038116158061238d5750803b155b1561239b5782915050612475565b6040516370a0823160e01b81525f906001600160a01b038616906370a08231906123c990859060040161497c565b602060405180830381865afa1580156123e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124089190614dfa565b9050805f0361241b578392505050612475565b5f612427838888613756565b6040805160c0810182526001600160a01b03861681525f60208201819052918101859052606081018290526080810182905260a081019190915290915061246e86826137f8565b9450505050505b9392505050565b6124846146f3565b60408051608081018252606481526101f46020820152610bb89181019190915261271060608201526002545f5b81811015612523575f600282815481106124cd576124cd614de6565b5f9182526020822001546001600160a01b031691505b60048110156125195761250f828a8a88856004811061250457612504614de6565b60200201518b613839565b96506001016124e3565b50506001016124b1565b509295945050505050565b61253b83838360016139ad565b61255a5782604051635274afe760e01b8152600401610634919061497c565b505050565b612567613a0f565b6002612577612574613a35565b90565b55565b5f5f836001600160a01b03168360405160240161259991815260200190565b60408051601f198184030181529181526020820180516001600160e01b03166387455d4160e01b179052516125ce91906152b1565b5f60405180830381855afa9150503d805f8114612606576040519150601f19603f3d011682016040523d82523d5f602084013e61260b565b606091505b509150915081801561261f57506020815110155b801561263c57508080602001905181019061263a91906152c7565b155b1561265a5760405163e2c865df60e01b815260040160405180910390fd5b50505050565b825f63ffffffff841615801561267a575063ffffffff8316155b1561268657505f61273f565b5f866001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126e79190614dfa565b905063ffffffff85161561271a575f61270a828763ffffffff16620f4240613a59565b905083811115612718578093505b505b63ffffffff84161561273d5761273a818563ffffffff16620f4240613a59565b91505b505b94509492505050565b6040516370a0823160e01b81525f906001600160a01b038616906370a082319061277690309060040161497c565b602060405180830381865afa158015612791573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b59190614dfa565b90505f6127c78989875f8b8b3061294c565b90505f82876001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016127f7919061497c565b602060405180830381865afa158015612812573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128369190614dfa565b61284091906152e2565b9050805f0361286257604051639a5f2fa960e01b815260040160405180910390fd5b61ffff8516156128c8575f81831161287a575f61289b565b8261288583826152e2565b61289190612710614f60565b61289b9190615309565b90508561ffff168111156128c657805f604051631500197d60e31b8152600401610634929190615328565b505b5f6128d98b8b15845f8c8e3061294c565b905061ffff8516158015906128ed57508681105b1561293f575f876128fe83826152e2565b61290a90612710614f60565b6129149190615309565b90508561ffff1681111561226a575f81604051631500197d60e31b8152600401610634929190615328565b5050505050505050505050565b5f5f6040518060e001604052808a81526020018915158152602001888152602001878152602001866001600160a01b03168152602001856001600160a01b03168152602001846001600160a01b031681525090505f7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03166348c89491836040516020016129e1919061533d565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401612a0c9190614be7565b5f604051808303815f875af1158015612a27573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a4e91908101906153ab565b905080806020019051810190612a649190614dfa565b9a9950505050505050505050565b6001612577612574613a35565b612a8761474e565b612a918585612d37565b808252612aa19086908585613b09565b604083015260208201525f612abc60a0840160808501614e40565b6001600160801b03161115612afb57805160200151612afb9086612ae660a0860160808701614e40565b612af660c0870160a08801614f37565b613d84565b949350505050565b6040516370a0823160e01b81525f906001600160a01b037f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad7316906370a0823190612b5190309060040161497c565b602060405180830381865afa158015612b6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b909190614dfa565b905081811015612c14576001600160a01b037f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad731663d0e30db0612bd383856152e2565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612bfc575f5ffd5b505af1158015612c0e573d5f5f3e3d5ffd5b50505050505b5050565b5f7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316865f01516001600160a01b031614612caa575f612c8b87604001517f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73895f0151885f30613fa7565b9050612ca28760200151885f015188848888613fa7565b915050612cdf565b612cdc86602001517f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad7387878787613fa7565b90505b95945050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612d3f614773565b5f612d6b7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738585610a92565b6001600160a01b037f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73811684526020840182905281519192505f911615612db6578160400151612db8565b5f5b6004549091505f5b81811015612f80575f60048281548110612ddc57612ddc614de6565b5f918252602090912001546001600160a01b03908116915088168103612e025750612f78565b5f612e0e828a8a610a92565b80519091506001600160a01b03161580612e2c575084816040015111155b15612e38575050612f78565b6001600160a01b038083165f908152600560209081526040808320815160a081018352815460ff80821615158352610100820481161515958301959095526201000081049096169281019290925292939092916060840191600160b01b9004166001811115612ea957612ea96148f0565b6001811115612eba57612eba6148f0565b81529054600160b81b900462ffffff166020909101528051909150612ee157505050612f78565b82885f01906001600160a01b031690816001600160a01b0316815250508188602001819052506040518060c0016040528082604001516001600160a01b031681526020018260200151151581526020015f81526020015f815260200182606001516001811115612f5357612f536148f0565b8152602001826080015162ffffff168152508860400181905250816040015195505050505b600101612dc0565b506020840151516001600160a01b0316612fd1577f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738660405163c4b4593d60e01b8152600401610634929190614db1565b50505092915050565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f5f5f886001600160a01b0316886001600160a01b03161061302757888861302a565b87895b915091506040518060a00160405280836001600160a01b03168152602001826001600160a01b031681526020018862ffffff165f14613069578861306e565b628000005b62ffffff1681526020018760020b8152602001866001600160a01b03168152509350836040516020016130a19190614eee565b60405160208183030381529060405280519060200120925050509550959350505050565b5f5b8181101561255a57368383838181106130e2576130e2614de6565b6080029190910191505f90506130fe608083016060840161543d565b600581111561310f5761310f6148f0565b0361311a5750613220565b5f8061312c6040840160208501614bf9565b6001600160a01b0316146131c55761314a6040830160208401614bf9565b6001600160a01b03166370a082316131656020850185614bf9565b6040518263ffffffff1660e01b8152600401613181919061497c565b602060405180830381865afa15801561319c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131c09190614dfa565b6131dd565b6131d26020830183614bf9565b6001600160a01b0316315b90506131fd8160408401356131f8608086016060870161543d565b613fe8565b61321d576040516372fc940b60e01b815260048101849052602401610634565b50505b6001016130c7565b7f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316826001600160a01b03160361326a57612c1481612b03565b6040516370a0823160e01b815281906001600160a01b038416906370a082319061329890309060040161497c565b602060405180830381865afa1580156132b3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132d79190614dfa565b1015612c145760405163d8c96a0760e01b815260040160405180910390fd5b5f5f8590507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad736001600160a01b0316886001600160a01b0316146133c2576133bf6040518060c0016040528086604001516001600160a01b031681526020018660200151151581526020015f81526020015f815260200186606001516001811115613383576133836148f0565b8152602001866080015162ffffff168152507f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad738a895f30613fa7565b90505b6133e8898a5f01516001600160a01b03168a6001600160a01b03161483888c8c8961294c565b9998505050505050505050565b5f5f8360200151613406578261340c565b608083901d5b90505f846020015161342257608084901d613424565b835b90505f6134308361545b565b6001600160801b031690505f826001600160801b03169050866060015181101561346d576040516381efc14360e01b815260040160405180910390fd5b60808701516001600160a01b031661358157604051632961046560e21b81526001600160a01b037f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951169063a5841194906134cb905f9060040161497c565b5f604051808303815f87803b1580156134e2575f5ffd5b505af11580156134f4573d5f5f3e3d5ffd5b505050507f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015613556573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061357b9190614dfa565b506136ba565b6080870151604051632961046560e21b81526001600160a01b037f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e40951169163a5841194916135d1919060040161497c565b5f604051808303815f87803b1580156135e8575f5ffd5b505af11580156135fa573d5f5f3e3d5ffd5b505050608088015161363791506001600160a01b03167f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409518461252e565b7f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e409516001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015613694573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136b89190614dfa565b505b60a087015160c0880151604051630b0d9c0960e01b81526001600160a01b0392831660048201529082166024820152604481018390527f0000000000000000000000008366a39cc670b4001a1121b8f6a443a643e4095190911690630b0d9c09906064015f604051808303815f87803b158015613735575f5ffd5b505af1158015613747573d5f5f3e3d5ffd5b50929998505050505050505050565b5f5f5f856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613795573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b99190615492565b5091509150836001600160a01b0316856001600160a01b0316106137e657806001600160701b031661152e565b506001600160701b0316949350505050565b6138006146f3565b82515f906001600160a01b03161561381c57836040015161381e565b5f5b9050808360400151116138315783612afb565b509092915050565b6138416146f3565b604051630b4c774160e11b81525f906001600160a01b03881690631698ee829061387390899089908990600401615289565b602060405180830381865afa15801561388e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138b29190615253565b90506001600160a01b03811615806138c95750803b155b156138d75782915050612cdf565b6040516370a0823160e01b81525f906001600160a01b038716906370a082319061390590859060040161497c565b602060405180830381865afa158015613920573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139449190614dfa565b9050805f03613957578392505050612cdf565b5f613962838961409f565b6040805160c0810182526001600160a01b03861681526001602082018190529181018590525f6060820152608081019190915262ffffff881660a0820152909150612a6486826137f8565b60405163a9059cbb60e01b5f8181526001600160a01b038616600452602485905291602083604481808b5af1925060015f51148316613a035783831516156139f7573d5f823e3d81fd5b5f873b113d1516831692505b60405250949350505050565b613a17614258565b1561131b57604051633ee5aeb560e01b815260040160405180910390fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0090565b5f5f5f613a66868661426d565b91509150815f03613a8a57838181613a8057613a806152f5565b0492505050612475565b818411613aa157613aa16003851502601118614289565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b815f80613b196020850185614f0d565b63ffffffff16151580613b405750613b376040850160208601614f0d565b63ffffffff1615155b80613b5f5750613b566060850160408601614f0d565b63ffffffff1615155b90508015613ca3575f876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bc89190614dfa565b9050613bd76020860186614f0d565b63ffffffff1615801590613c115750613c0681613bf76020880188614f0d565b63ffffffff16620f4240613a59565b876020015160400151105b15613c2f5760405163244783bf60e11b815260040160405180910390fd5b613c3f6040860160208701614f0d565b63ffffffff1615613c6f575f613c5f82613bf76040890160208a01614f0d565b905084811115613c6d578094505b505b613c7f6060860160408701614f0d565b63ffffffff1615613ca157613c9e81613bf76060880160408901614f0d565b92505b505b613cb36080850160608601614e40565b6001600160801b031615801590613d565750613cd56080850160608601614e40565b86516020880151516040516370a0823160e01b81526001600160801b0393909316926001600160a01b03909216916370a0823191613d159160040161497c565b602060405180830381865afa158015613d30573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d549190614dfa565b105b15613d745760405163244783bf60e11b815260040160405180910390fd5b61273d61178260c0860186614fbc565b613d96826001600160801b0316612b03565b6040516370a0823160e01b81525f906001600160a01b038516906370a0823190613dc490309060040161497c565b602060405180830381865afa158015613ddf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e039190614dfa565b9050613e3c857f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad7386866001600160801b03165f30613fa7565b505f81856001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613e6b919061497c565b602060405180830381865afa158015613e86573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eaa9190614dfa565b613eb491906152e2565b9050805f03613ed657604051639a5f2fa960e01b815260040160405180910390fd5b5f613f0587877f0000000000000000000000000bd7d308f8e1639fab988df18a8011f41eacad73855f30613fa7565b9050805f03613f2757604051639a5f2fa960e01b815260040160405180910390fd5b61ffff841615801590613f425750846001600160801b031681105b15612c0e575f6001600160801b038616613f5c83826152e2565b613f6890612710614f60565b613f729190615309565b90508461ffff16811115613f9d575f81604051631500197d60e31b8152600401610634929190615328565b5050505050505050565b5f600187608001516001811115613fc057613fc06148f0565b14613fd9578651613fd4908786868661429a565b6112ff565b86516112ff9087868686614549565b5f6001826005811115613ffd57613ffd6148f0565b0361400b5750818311612475565b600282600581111561401f5761401f6148f0565b0361402e575081831015612475565b6003826005811115614042576140426148f0565b036140505750818310612475565b6004826005811115614064576140646148f0565b03614073575081831115612475565b6005826005811115614087576140876148f0565b036140955750828214612475565b5060019392505050565b5f5f836001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa9250505080156140fb575060408051601f3d908101601f191682019092526140f8918101906154cb565b60015b614108575f915050611c2d565b509495505050505050806001600160a01b03165f0361412a575f915050611c2d565b5f846001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015614167573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061418b9190615552565b6001600160801b03169050805f036141a7575f92505050611c2d565b5f856001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141e4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142089190615253565b6001600160a01b0316856001600160a01b0316149050806142405761423b82846001600160a01b0316600160601b613a59565b61152e565b61152e82600160601b856001600160a01b0316613a59565b5f6002614266612574613a35565b5414919050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b5f5f5f876001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156142d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142fd9190615492565b50915091505f886001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561433f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143639190615253565b6001600160a01b0316886001600160a01b03161490505f5f8261439957836001600160701b0316856001600160701b03166143ae565b846001600160701b0316846001600160701b03165b90925090506143c76001600160a01b038b168c8b61252e565b5f828b6001600160a01b03166370a082318e6040518263ffffffff1660e01b81526004016143f5919061497c565b602060405180830381865afa158015614410573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144349190614dfa565b61443e91906152e2565b90505f61444d826103e5614f60565b90508061445c856103e8614f60565b6144669190614e6f565b6144708483614f60565b61447a9190615309565b97508988101561449d576040516381efc14360e01b815260040160405180910390fd5b5f5f866144ab57895f6144ae565b5f8a5b915091508e6001600160a01b031663022c0d9f83838e6040518463ffffffff1660e01b815260040161450a9392919092835260208301919091526001600160a01b031660408201526080606082018190525f9082015260a00190565b5f604051808303815f87803b158015614521575f5ffd5b505af1158015614533573d5f5f3e3d5ffd5b5050505050505050505050505095945050505050565b5f5f866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015614587573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145ab9190615253565b6001600160a01b0316866001600160a01b03161490505f5f886001600160a01b031663128acb0886858a876145fe576145f9600173fffd8963efd1fc6a506488495d951d5263988d2661519f565b61460e565b61460e6401000276a360016151be565b8d8f604051602001614621929190614db1565b6040516020818303038152906040526040518663ffffffff1660e01b815260040161465095949392919061556d565b60408051808303815f875af115801561466b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061468f91906155a7565b915091508261469e57816146a0565b805b6146a990615185565b9350858410156146cc576040516381efc14360e01b815260040160405180910390fd5b50505095945050505050565b5080545f8255905f5260205f2090810190611ff391906147a7565b6040805160c0810182525f80825260208201819052918101829052606081018290529060808201905b81525f60209091015290565b6040805160a0810182525f8082526020820181905291810182905290606082019061471c565b6040518060600160405280614761614773565b81526020015f81526020015f81525090565b60405180606001604052805f6001600160a01b031681526020016147956146f3565b81526020016147a26146f3565b905290565b5b808211156147bb575f81556001016147a8565b5090565b6001600160a01b0381168114611ff3575f5ffd5b80356110a6816147bf565b60ff81168114611ff3575f5ffd5b5f5f604083850312156147fd575f5ffd5b8235614808816147bf565b91506020830135614818816147de565b809150509250929050565b5f5f83601f840112614833575f5ffd5b5081356001600160401b03811115614849575f5ffd5b6020830191508360208260051b8501011115614863575f5ffd5b9250929050565b5f5f6020838503121561487b575f5ffd5b82356001600160401b03811115614890575f5ffd5b61489c85828601614823565b90969095509350505050565b5f5f5f606084860312156148ba575f5ffd5b83356148c5816147bf565b925060208401356148d5816147bf565b915060408401356148e5816147de565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b6002811061492057634e487b7160e01b5f52602160045260245ffd5b9052565b81516001600160a01b03168152602080830151151590820152604080830151908201526060808301519082015260808083015160c083019161496890840182614904565b5060a09283015162ffffff16919092015290565b6001600160a01b0391909116815260200190565b5f5f604083850312156149a1575f5ffd5b823591506020830135614818816147bf565b5f5f5f606084860312156149c5575f5ffd5b83356149d0816147bf565b92506020840135915060408401356148e5816147bf565b5f610180828403128015613831575f5ffd5b5f5f5f5f5f5f5f60c0888a031215614a0f575f5ffd5b8735614a1a816147bf565b965060208801359550604088013594506060880135614a38816147de565b935060808801356001600160401b03811115614a52575f5ffd5b614a5e8a828b01614823565b90945092505060a08801356001600160401b03811115614a7c575f5ffd5b880160e0818b031215614a8d575f5ffd5b8091505092959891949750929550565b5f5f5f5f5f5f60a08789031215614ab2575f5ffd5b8635614abd816147bf565b955060208701359450604087013593506060870135614adb816147de565b925060808701356001600160401b03811115614af5575f5ffd5b614b0189828a01614823565b979a9699509497509295939492505050565b5f60208284031215614b23575f5ffd5b81356001600160401b03811115614b38575f5ffd5b82016101c08185031215612475575f5ffd5b5f5f83601f840112614b5a575f5ffd5b5081356001600160401b03811115614b70575f5ffd5b602083019150836020828501011115614863575f5ffd5b5f5f60208385031215614b98575f5ffd5b82356001600160401b03811115614bad575f5ffd5b61489c85828601614b4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6124756020830184614bb9565b5f60208284031215614c09575f5ffd5b8135612475816147bf565b5f60208284031215614c24575f5ffd5b5035919050565b851515815284151560208201526001600160a01b038416604082015260a08101614c586060830185614904565b62ffffff831660808301529695505050505050565b8015158114611ff3575f5ffd5b80356110a681614c6d565b62ffffff81168114611ff3575f5ffd5b5f5f5f5f5f60a08688031215614ca9575f5ffd5b8535614cb4816147bf565b94506020860135614cc4816147bf565b93506040860135614cd481614c6d565b9250606086013560028110614ce7575f5ffd5b91506080860135614cf781614c85565b809150509295509295909350565b5f5f5f5f60408587031215614d18575f5ffd5b84356001600160401b03811115614d2d575f5ffd5b614d3987828801614823565b90955093505060208501356001600160401b03811115614d57575f5ffd5b614d6387828801614823565b95989497509550505050565b5f5f5f5f60608587031215614d82575f5ffd5b843593506020850135925060408501356001600160401b03811115614da5575f5ffd5b614d6387828801614b4a565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682521515602082015260400190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614e0a575f5ffd5b5051919050565b5f60208284031215614e21575f5ffd5b813561247581614c85565b6001600160801b0381168114611ff3575f5ffd5b5f60208284031215614e50575f5ffd5b813561247581614e2c565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611c2d57611c2d614e5b565b8060020b8114611ff3575f5ffd5b5f60208284031215614ea0575f5ffd5b813561247581614e82565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b60a08101611c2d8284614eab565b63ffffffff81168114611ff3575f5ffd5b5f60208284031215614f1d575f5ffd5b813561247581614efc565b61ffff81168114611ff3575f5ffd5b5f60208284031215614f47575f5ffd5b813561247581614f28565b918252602082015260400190565b8082028115828204841417611c2d57611c2d614e5b565b5f5f8335601e19843603018112614f8c575f5ffd5b8301803591506001600160401b03821115614fa5575f5ffd5b6020019150600581901b3603821315614863575f5ffd5b5f5f8335601e19843603018112614fd1575f5ffd5b8301803591506001600160401b03821115614fea575f5ffd5b6020019150600781901b3603821315614863575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b038111828210171561503757615037615001565b60405290565b60405160a081016001600160401b038111828210171561503757615037615001565b604051601f8201601f191681016001600160401b038111828210171561508757615087615001565b604052919050565b5f818303610160811280156150a2575f5ffd5b506150ab615015565b60a08212156150b8575f5ffd5b6150c061503d565b915083356150cd816147bf565b825260208401356150dd816147bf565b602083015260408401356150f081614c85565b6040830152606084013561510381614e82565b60608301526080840135615116816147bf565b608083015281815261512a60a08501614c7a565b602082015260c0840135604082015260e084013560608201819052915061515461010085016147d3565b608082015261516661012085016147d3565b60a082015261517861014085016147d3565b60c0820152949350505050565b5f600160ff1b820161519957615199614e5b565b505f0390565b6001600160a01b038281168282160390811115611c2d57611c2d614e5b565b6001600160a01b038181168382160190811115611c2d57611c2d614e5b565b6151e78184614eab565b8151151560a0820152602082015160c08201526040909101516001600160a01b031660e082015261012061010082018190525f9082015261014001919050565b5f5f60408385031215615238575f5ffd5b8235615243816147bf565b91506020830135614818816147bf565b5f60208284031215615263575f5ffd5b8151612475816147bf565b5f6020828403121561527e575f5ffd5b815161247581614c85565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b5f82518060208501845e5f920191825250919050565b5f602082840312156152d7575f5ffd5b815161247581614c6d565b81810381811115611c2d57611c2d614e5b565b634e487b7160e01b5f52601260045260245ffd5b5f8261532357634e487b7160e01b5f52601260045260245ffd5b500490565b61ffff92831681529116602082015260400190565b5f61016082019050615350828451614eab565b6020830151151560a083810191909152604084015160c080850191909152606085015160e085015260808501516001600160a01b03908116610100860152918501518216610120850152909301519092166101409091015290565b5f602082840312156153bb575f5ffd5b81516001600160401b038111156153d0575f5ffd5b8201601f810184136153e0575f5ffd5b80516001600160401b038111156153f9576153f9615001565b61540c601f8201601f191660200161505f565b818152856020838501011115615420575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561544d575f5ffd5b813560068110612475575f5ffd5b5f600f82900b6001607f1b810161547457615474614e5b565b5f0392915050565b80516001600160701b03811681146110a6575f5ffd5b5f5f5f606084860312156154a4575f5ffd5b6154ad8461547c565b92506154bb6020850161547c565b915060408401516148e581614efc565b5f5f5f5f5f5f5f60e0888a0312156154e1575f5ffd5b87516154ec816147bf565b60208901519097506154fd81614e82565b604089015190965061550e81614f28565b606089015190955061551f81614f28565b608089015190945061553081614f28565b60a0890151909350615541816147de565b60c0890151909250614a8d81614c6d565b5f60208284031215615562575f5ffd5b815161247581614e2c565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f906112ff90830184614bb9565b5f5f604083850312156155b8575f5ffd5b50508051602090910151909290915056fe5d370c76eacf69ac39baf6888766350092d881a70a870ca052922424381f18361c5843d3fe1ed176aff44711b0702f1c9b53df75de79fd7752edaae67fa8eff5bda9d2e08fbf88f1e76d31efcf8870458f7689cc3d7f095a1dcbb61bb6ea85c4