608060405234801561001057600080fd5b506128bc806100206000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80636352211e11610104578063ab770b4f116100a2578063c87b56dd11610071578063c87b56dd14610519578063d4ccaa181461052c578063e985e9c51461055a578063fc6f94681461059657600080fd5b8063ab770b4f14610497578063b88d4fde146104c5578063c1722d81146104d8578063c4d66de81461050657600080fd5b8063892c4603116100de578063892c4603146104565780638f2839701461046957806395d89b411461047c578063a22cb4651461048457600080fd5b80636352211e1461041d57806370a082311461043057806375ef0f141461044357600080fd5b80631b961e95116101715780632f745c591161014b5780632f745c59146103d157806342842e0e146103e457806344a0aa38146103f75780634f6ccce71461040a57600080fd5b80631b961e95146102f157806323b872dd1461033157806326c1e7501461034457600080fd5b8063081812fc116101ad578063081812fc14610226578063095ea7b3146102515780630bd16c641461026457806318160ddd146102df57600080fd5b806301ffc9a7146101d457806302f36d10146101fc57806306fdde0314610211575b600080fd5b6101e76101e23660046122e5565b6105a9565b60405190151581526020015b60405180910390f35b61020f61020a366004612335565b6105d4565b005b610219610767565b6040516101f391906125a4565b61023961023436600461231d565b6107f9565b6040516001600160a01b0390911681526020016101f3565b61020f61025f3660046122bc565b61088e565b61027761027236600461231d565b6109a4565b60408051825181526020808401516001600160a01b03908116828401529383015180519094168284015283015160ff90811660608084019190915292840151811660808084019190915292840151811660a083015291909201511660c082015260e0016101f3565b6099545b6040519081526020016101f3565b61031f6102ff36600461234f565b60cb60209081526000928352604080842090915290825290205460ff1681565b60405160ff90911681526020016101f3565b61020f61033f36600461218f565b610a78565b61039761035236600461231d565b60ca602052600090815260409020546001600160a01b0381169060ff600160a01b8204811691600160a81b8104821691600160b01b8204811691600160b81b90041685565b604080516001600160a01b03909616865260ff9485166020870152928416928501929092528216606084015216608082015260a0016101f3565b6102e36103df3660046122bc565b610aa9565b61020f6103f236600461218f565b610b3f565b61020f610405366004612335565b610b5a565b6102e361041836600461231d565b610cb1565b61023961042b36600461231d565b610d52565b6102e361043e36600461213c565b610dc9565b61020f61045136600461241f565b610e50565b61020f61046436600461236a565b6110ab565b61020f61047736600461213c565b611306565b610219611352565b61020f610492366004612282565b611361565b6101e76104a536600461234f565b60ce60209081526000928352604080842090915290825290205460ff1681565b61020f6104d33660046121ca565b611426565b61031f6104e636600461234f565b60cd60209081526000928352604080842090915290825290205460ff1681565b61020f61051436600461213c565b611458565b61021961052736600461231d565b611527565b6101e761053a36600461234f565b60cc60209081526000928352604080842090915290825290205460ff1681565b6101e761056836600461215d565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b60c954610239906001600160a01b031681565b60006001600160e01b0319821663780e9d6360e01b14806105ce57506105ce82611662565b92915050565b60ff808216600090815260cc60209081526040808320338452909152902054166106335760405162461bcd60e51b815260206004820152600b60248201526a63616e277420636c61696d60a81b60448201526064015b60405180910390fd5b6000610641338360006116b2565b60ff808416600081815260cb602090815260408083203380855290835281842054825160a0810184529182529281019490945294955090921692810161068684611712565b60ff908116825284811660208084019190915260006040938401819052888316815260cc825283812033808352908352848220805460ff1916905588825260ca835290849020855181549387015195870151606088015160808901518716600160b81b0260ff60b81b19918816600160b01b0260ff60b01b19938916600160a81b029390931661ffff60a81b1999909816600160a01b026001600160a81b03199097166001600160a01b039490941693909317959095179690961694909417949094179190911691909117909155909150610761908461178d565b50505050565b60606065805461077690612768565b80601f01602080910402602001604051908101604052809291908181526020018280546107a290612768565b80156107ef5780601f106107c4576101008083540402835291602001916107ef565b820191906000526020600020905b8154815290600101906020018083116107d257829003601f168201915b5050505050905090565b6000818152606760205260408120546001600160a01b03166108725760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161062a565b506000908152606960205260409020546001600160a01b031690565b600061089982610d52565b9050806001600160a01b0316836001600160a01b031614156109075760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161062a565b336001600160a01b038216148061092357506109238133610568565b6109955760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161062a565b61099f83836118db565b505050565b6109e9604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b6040518060600160405280838152602001610a0384610d52565b6001600160a01b039081168252600094855260ca6020908152604095869020865160a0810188529054928316815260ff600160a01b8404811682840152600160a81b8404811697820197909752600160b01b830487166060820152600160b81b90920490951660808201529301929092525090565b610a823382611949565b610a9e5760405162461bcd60e51b815260040161062a90612630565b61099f838383611a40565b6000610ab483610dc9565b8210610b165760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b606482015260840161062a565b506001600160a01b03919091166000908152609760209081526040808320938352929052205490565b61099f83838360405180602001604052806000815250611426565b60ff808216600090815260ce6020908152604080832033845290915290205416610bb45760405162461bcd60e51b815260206004820152600b60248201526a63616e277420636c61696d60a81b604482015260640161062a565b6000610bc2338360016116b2565b6040805160a0810182523380825260ff8087166020808501828152600083815260cd8352878120868252835287812054851687890190815260608801828152600160808a0190815295835260ce85528983208884528552898320805460ff191690558a835260ca9094529790208651815492519851935194518616600160b81b0260ff60b81b19958716600160b01b0260ff60b01b19958816600160a81b029590951661ffff60a81b199a909716600160a01b026001600160a81b03199094166001600160a01b03929092169190911792909217979097169390931717161790925591925061099f908361178d565b6000610cbc60995490565b8210610d1f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b606482015260840161062a565b60998281548110610d4057634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000818152606760205260408120546001600160a01b0316806105ce5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161062a565b60006001600160a01b038216610e345760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161062a565b506001600160a01b031660009081526068602052604090205490565b60c9546001600160a01b03163314610e7a5760405162461bcd60e51b815260040161062a90612681565b60005b81518161ffff16101561099f5760ff8316600090815260cd602052604081208351909190849061ffff8516908110610ec557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610f0a5760405162461bcd60e51b815260040161062a90612609565b60ff8316600090815260ce602052604081208351909190849061ffff8516908110610f4557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff1615610f8a5760405162461bcd60e51b815260040161062a90612609565b818161ffff1681518110610fae57634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160cd60008560ff1660ff1681526020019081526020016000206000848461ffff1681518110610ff957634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b031682528181019290925260409081016000908120805460ff191660ff958616179055928616835260ce9091528120835160019290859061ffff861690811061106657634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806110a3816127a3565b915050610e7d565b60c9546001600160a01b031633146110d55760405162461bcd60e51b815260040161062a90612681565b60005b81518161ffff16101561099f5760ff8316600090815260cb602052604081208351909190849061ffff851690811061112057634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156111655760405162461bcd60e51b815260040161062a90612609565b60ff8316600090815260cc602052604081208351909190849061ffff85169081106111a057634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b031682528101919091526040016000205460ff16156111e55760405162461bcd60e51b815260040161062a90612609565b818161ffff168151811061120957634e487b7160e01b600052603260045260246000fd5b60200260200101516020015160cb60008560ff1660ff1681526020019081526020016000206000848461ffff168151811061125457634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b031682528181019290925260409081016000908120805460ff191660ff958616179055928616835260cc9091528120835160019290859061ffff86169081106112c157634e487b7160e01b600052603260045260246000fd5b602090810291909101810151516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112fe816127a3565b9150506110d8565b60c9546001600160a01b031633146113305760405162461bcd60e51b815260040161062a90612681565b60c980546001600160a01b0319166001600160a01b0392909216919091179055565b60606066805461077690612768565b6001600160a01b0382163314156113ba5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161062a565b336000818152606a602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6114303383611949565b61144c5760405162461bcd60e51b815260040161062a90612630565b61076184848484611beb565b600054610100900460ff1680611471575060005460ff16155b6114d45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161062a565b600054610100900460ff161580156114f6576000805461ffff19166101011790555b60c980546001600160a01b0319166001600160a01b0384161790558015611523576000805461ff00191690555b5050565b6000818152606760205260409020546060906001600160a01b031661158e5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e00604482015260640161062a565b600060405180606001604052806037815260200161285060379139600084815260ca6020908152604091829020825160a08101845290546001600160a01b038116825260ff600160a01b82048116938301849052600160a81b8204811694830194909452600160b01b810484166060830152600160b81b9004909216608083015291925090829061161e90611c1e565b61162e836060015160ff16611c1e565b61163787611c1e565b60405160200161164a94939291906124ea565b60405160208183030381529060405292505050919050565b60006001600160e01b031982166380ac58cd60e01b148061169357506001600160e01b03198216635b5e139f60e01b145b806105ce57506301ffc9a760e01b6001600160e01b03198316146105ce565b6040516bffffffffffffffffffffffff19606085901b1660208201526001600160f81b031960f884811b8216603484015283901b16603582015260009060360160408051601f198184030181529190528051602090910120949350505050565b60008160ff166001141561172857506007919050565b60048260ff16101561173c57506006919050565b60088260ff16101561175057506005919050565b60108260ff16101561176457506004919050565b60208260ff16101561177857506003919050565b60408260ff161015611788575060025b919050565b6001600160a01b0382166117e35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161062a565b6000818152606760205260409020546001600160a01b0316156118485760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161062a565b61185460008383611d38565b6001600160a01b038216600090815260686020526040812080546001929061187d9084906126f9565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061191082610d52565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152606760205260408120546001600160a01b03166119c25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161062a565b60006119cd83610d52565b9050806001600160a01b0316846001600160a01b03161480611a085750836001600160a01b03166119fd846107f9565b6001600160a01b0316145b80611a3857506001600160a01b038082166000908152606a602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611a5382610d52565b6001600160a01b031614611abb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161062a565b6001600160a01b038216611b1d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161062a565b611b28838383611d38565b611b336000826118db565b6001600160a01b0383166000908152606860205260408120805460019290611b5c908490612725565b90915550506001600160a01b0382166000908152606860205260408120805460019290611b8a9084906126f9565b909155505060008181526067602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611bf6848484611a40565b611c0284848484611df0565b6107615760405162461bcd60e51b815260040161062a906125b7565b606081611c425750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c6c5780611c56816127c5565b9150611c659050600a83612711565b9150611c46565b60008167ffffffffffffffff811115611c9557634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611cbf576020820181803683370190505b5090505b8415611a3857611cd4600183612725565b9150611ce1600a866127e0565b611cec9060306126f9565b60f81b818381518110611d0f57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611d31600a86612711565b9450611cc3565b6001600160a01b038316611d9357611d8e81609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b611db6565b816001600160a01b0316836001600160a01b031614611db657611db68382611efd565b6001600160a01b038216611dcd5761099f81611f9a565b826001600160a01b0316826001600160a01b03161461099f5761099f8282612073565b60006001600160a01b0384163b15611ef257604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e34903390899088908890600401612567565b602060405180830381600087803b158015611e4e57600080fd5b505af1925050508015611e7e575060408051601f3d908101601f19168201909252611e7b91810190612301565b60015b611ed8573d808015611eac576040519150601f19603f3d011682016040523d82523d6000602084013e611eb1565b606091505b508051611ed05760405162461bcd60e51b815260040161062a906125b7565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611a38565b506001949350505050565b60006001611f0a84610dc9565b611f149190612725565b600083815260986020526040902054909150808214611f67576001600160a01b03841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b5060009182526098602090815260408084208490556001600160a01b039094168352609781528383209183525290812055565b609954600090611fac90600190612725565b6000838152609a602052604081205460998054939450909284908110611fe257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050806099838154811061201157634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152609a9091526040808220849055858252812055609980548061205757634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061207e83610dc9565b6001600160a01b039093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b80356001600160a01b038116811461178857600080fd5b6000604082840312156120df578081fd5b6040516040810181811067ffffffffffffffff8211171561210257612102612820565b604052905080612111836120b7565b815261211f6020840161212b565b60208201525092915050565b803560ff8116811461178857600080fd5b60006020828403121561214d578081fd5b612156826120b7565b9392505050565b6000806040838503121561216f578081fd5b612178836120b7565b9150612186602084016120b7565b90509250929050565b6000806000606084860312156121a3578081fd5b6121ac846120b7565b92506121ba602085016120b7565b9150604084013590509250925092565b600080600080608085870312156121df578081fd5b6121e8856120b7565b935060206121f78187016120b7565b935060408601359250606086013567ffffffffffffffff8082111561221a578384fd5b818801915088601f83011261222d578384fd5b81358181111561223f5761223f612820565b612251601f8201601f191685016126a4565b91508082528984828501011115612266578485fd5b8084840185840137810190920192909252939692955090935050565b60008060408385031215612294578182fd5b61229d836120b7565b9150602083013580151581146122b1578182fd5b809150509250929050565b600080604083850312156122ce578182fd5b6122d7836120b7565b946020939093013593505050565b6000602082840312156122f6578081fd5b813561215681612836565b600060208284031215612312578081fd5b815161215681612836565b60006020828403121561232e578081fd5b5035919050565b600060208284031215612346578081fd5b6121568261212b565b60008060408385031215612361578182fd5b6121788361212b565b600080604080848603121561237d578283fd5b6123868461212b565b925060208085013567ffffffffffffffff8111156123a2578384fd5b8501601f810187136123b2578384fd5b80356123c56123c0826126d5565b6126a4565b8082825284820191508484018a868560061b87010111156123e4578788fd5b8794505b8385101561240e576123fa8b826120ce565b8352600194909401939185019186016123e8565b508096505050505050509250929050565b6000806040808486031215612432578283fd5b61243b8461212b565b925060208085013567ffffffffffffffff811115612457578384fd5b8501601f81018713612467578384fd5b80356124756123c0826126d5565b8082825284820191508484018a868560061b8701011115612494578788fd5b8794505b8385101561240e576124aa8b826120ce565b835260019490940193918501918601612498565b600081518084526124d681602086016020860161273c565b601f01601f19169290920160200192915050565b600085516124fc818460208a0161273c565b603960f91b908301908152855161251a816001840160208a0161273c565b808201915050602d60f81b806001830152855161253e816002850160208a0161273c565b6002920191820152835161255981600384016020880161273c565b016003019695505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061259a908301846124be565b9695505050505050565b60208152600061215660208301846124be565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252600d908201526c185b1c9958591e481859191959609a1b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252600990820152683737ba1030b236b4b760b91b604082015260600190565b604051601f8201601f1916810167ffffffffffffffff811182821017156126cd576126cd612820565b604052919050565b600067ffffffffffffffff8211156126ef576126ef612820565b5060051b60200190565b6000821982111561270c5761270c6127f4565b500190565b6000826127205761272061280a565b500490565b600082821015612737576127376127f4565b500390565b60005b8381101561275757818101518382015260200161273f565b838111156107615750506000910152565b600181811c9082168061277c57607f821691505b6020821081141561279d57634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff808316818114156127bb576127bb6127f4565b6001019392505050565b60006000198214156127d9576127d96127f4565b5060010190565b6000826127ef576127ef61280a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461284c57600080fd5b5056fe68747470733a2f2f6461726b666f726573742d76616c68616c6c612e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2fa264697066735822122013f4a42e7c56f4c3194ec1431fcbb67d55679c90830ed92635d17b51b42cee6564736f6c63430008040033