608060405234801561001057600080fd5b506151ef806100206000396000f3fe608060405234801561001057600080fd5b50600436106101725760003560e01c8063891be974116100de578063e07f231911610097578063f242432a11610071578063f242432a1461032b578063f2fde38b1461033e578063f5298aca14610351578063ffc4e0a71461036457610172565b8063e07f2319146102fd578063e8a3d48514610310578063e985e9c51461031857610172565b8063891be974146102795780638da5cb5b1461029957806395d89b41146102ae57806398d0b4fb146102b6578063a22cb465146102d7578063cad96cca146102ea57610172565b80632eb2c2d6116101305780632eb2c2d6146102105780634e1273f41461022357806361e05459146102435780636b20c454146102565780636c0360eb14610269578063715018a61461027157610172565b8062fdd58e1461017757806301ffc9a7146101a057806306fdde03146101c05780630e89341c146101d55780630eaead67146101e8578063173c43d2146101fd575b600080fd5b61018a6101853660046145ab565b610377565b6040516101979190614db3565b60405180910390f35b6101b36101ae36600461466a565b6103e9565b6040516101979190614b05565b6101c86103fc565b6040516101979190614b10565b6101c86101e3366004614903565b61048b565b6101fb6101f63660046148ac565b610496565b005b6101fb61020b366004614692565b61050f565b6101fb61021e3660046143f9565b610612565b61023661023136600461460a565b610910565b6040516101979190614acd565b6101fb610251366004614759565b6109fb565b6101fb610264366004614508565b610b35565b6101c8610cbb565b6101fb610d53565b61028c610287366004614903565b610e11565b6040516101979190614aba565b6102a1610ea1565b6040516101979190614a4e565b6101c8610eb0565b6102c96102c436600461495c565b610f0c565b604051610197929190614a98565b6101fb6102e536600461457a565b610f56565b61028c6102f8366004614903565b611045565b6101fb61030b36600461491b565b6110c0565b6101c8611103565b6101b36103263660046143c1565b61115f565b6101fb6103393660046144a2565b611172565b6101fb61034c3660046143a5565b61132b565b6101fb61035f3660046145d6565b611440565b6101fb610372366004614845565b6114bc565b60006001600160a01b0383166103be5760405162461bcd60e51b815260040180806020018281038252602b815260200180614f67602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006103f482611517565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104835780601f1061045857610100808354040283529160200191610483565b820191906000526020600020905b81548152906001019060200180831161046657829003601f168201915b505050505081565b60606103f48261159b565b6102965460ff16156104ff5782606001516000815181106104b357fe5b6020026020010151600001516001600160a01b03166104d0610ea1565b6001600160a01b0316146104ff5760405162461bcd60e51b81526004016104f690614b23565b60405180910390fd5b61050a838383611731565b505050565b600054610100900460ff16806105285750610528611a2d565b80610536575060005460ff16155b6105715760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff1615801561059c576000805460ff1961ff0019909116610100171660011790555b6105aa878787878787611a3e565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e6105de611ac0565b88886040516105ef93929190614a62565b60405180910390a18015610609576000805461ff00191690555b50505050505050565b81518351146106525760405162461bcd60e51b81526004018080602001828103825260288152602001806151926028913960400191505060405180910390fd5b6001600160a01b0384166106975760405162461bcd60e51b81526004018080602001828103825260258152602001806150276025913960400191505060405180910390fd5b61069f611ac0565b6001600160a01b0316856001600160a01b031614806106c557506106c585610326611ac0565b6107005760405162461bcd60e51b815260040180806020018281038252603281526020018061504c6032913960400191505060405180910390fd5b600061070a611ac0565b905061071a818787878787610908565b60005b845181101561082057600085828151811061073457fe5b60200260200101519050600085838151811061074c57fe5b602002602001015190506107b9816040518060600160405280602a81526020016150f1602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611ac49092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a16815220546107f09082611b5b565b60009283526097602090815260408085206001600160a01b038c168652909152909220919091555060010161071d565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156108a657818101518382015260200161088e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156108e55781810151838201526020016108cd565b5050505090500194505050505060405180910390a4610908818787878787611bb5565b505050505050565b606081518351146109525760405162461bcd60e51b81526004018080602001828103825260298152602001806151696029913960400191505060405180910390fd5b600083516001600160401b038111801561096b57600080fd5b50604051908082528060200260200182016040528015610995578160200160208202803683370190505b50905060005b84518110156109f3576109d48582815181106109b357fe5b60200260200101518583815181106109c757fe5b6020026020010151610377565b8282815181106109e057fe5b602090810291909101015260010161099b565b509392505050565b600054610100900460ff1680610a145750610a14611a2d565b80610a22575060005460ff16155b610a5d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015610a88576000805460ff1961ff0019909116610100171660011790555b610a96888888888787611a3e565b60005b8451811015610ac857610ac0858281518110610ab157fe5b60200260200101516001610f56565b600101610a99565b50610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610b00611ac0565b8989604051610b1193929190614a62565b60405180910390a18015610b2b576000805461ff00191690555b5050505050505050565b8051825114610b565760405162461bcd60e51b81526004016104f690614cdc565b600082516001600160401b0381118015610b6f57600080fd5b50604051908082528060200260200182016040528015610b99578160200160208202803683370190505b509050600083516001600160401b0381118015610bb557600080fd5b50604051908082528060200260200182016040528015610bdf578160200160208202803683370190505b50905060005b8451811015610c5457610c1e858281518110610bfd57fe5b6020026020010151858381518110610c1157fe5b6020026020010151611e2b565b848381518110610c2a57fe5b60200260200101848481518110610c3d57fe5b602090810291909101019190915252600101610be5565b50610c60858584611ea0565b846001600160a01b0316610c72611ac0565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610cac929190614ae0565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d485780601f10610d1d57610100808354040283529160200191610d48565b820191906000526020600020905b815481529060010190602001808311610d2b57829003601f168201915b505050505090505b90565b610d5b611ac0565b6001600160a01b0316610d6c610ea1565b6001600160a01b031614610dc7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610e9657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610e47565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104835780601f1061045857610100808354040283529160200191610483565b6101fb6020528160005260406000208181548110610f2957600080fd5b6000918252602090912001546001600160a01b0381169250600160a01b90046001600160601b0316905082565b816001600160a01b0316610f68611ac0565b6001600160a01b03161415610fae5760405162461bcd60e51b81526004018080602001828103825260298152602001806151406029913960400191505060405180910390fd5b8060986000610fbb611ac0565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155610fff611ac0565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b60008181526101fa60209081526040808320805482518185028101850190935280835260609492939192909184018215610e9657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610e47565b816001600160a01b03166110d2611ac0565b6001600160a01b0316146110f85760405162461bcd60e51b81526004016104f690614be4565b61050a838383611f14565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156104835780601f1061045857610100808354040283529160200191610483565b600061116b8383611fc0565b9392505050565b6001600160a01b0384166111b75760405162461bcd60e51b81526004018080602001828103825260258152602001806150276025913960400191505060405180910390fd5b6111bf611ac0565b6001600160a01b0316856001600160a01b031614806111e557506111e585610326611ac0565b6112205760405162461bcd60e51b8152600401808060200182810382526029815260200180614fdc6029913960400191505060405180910390fd5b600061122a611ac0565b905061124a81878761123b88611fec565b61124488611fec565b87610908565b611291836040518060600160405280602a81526020016150f1602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611ac4565b60008581526097602090815260408083206001600160a01b038b811685529252808320939093558716815220546112c89084611b5b565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020614f4783398151915292908290030190a4610908818787878787612031565b611333611ac0565b6001600160a01b0316611344610ea1565b6001600160a01b03161461139f576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166113e45760405162461bcd60e51b8152600401808060200182810382526026815260200180614f926026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061144d8484611e2b565b90925090508115611463576114638585846121a2565b80156114b557846001600160a01b031661147b611ac0565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610cac929190614ddd565b5050505050565b60006114cc848660000151610377565b90508181156115065782808310156114e15750815b611501868689600001518460405180602001604052806000815250611172565b830390505b801561090857610908868583610496565b60006001600160e01b03198216636db15a0f60e01b148061154857506001600160e01b0319821663656cb66560e11b145b8061156357506001600160e01b031982166301ffc9a760e01b145b8061157e57506001600160e01b03198216636cdb3d1360e11b145b806103f45750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156116305780601f1061160557610100808354040283529160200191611630565b820191906000526020600020905b81548152906001019060200180831161161357829003601f168201915b505050505090506000611641610cbb565b9050805160001415611655575090506103f7565b81511561166f576116668183612216565b925050506103f7565b80611679856123fb565b6040516020018083805190602001908083835b602083106116ab5780518252601f19909201916020918201910161168c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106116f35780518252601f1990920191602091820191016116d4565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611740611ac0565b9050806001600160a01b0316826001600160a01b031614806117675750611767828261115f565b6117835760405162461bcd60e51b81526004016104f690614c33565b600083116117a35760405162461bcd60e51b81526004016104f690614c09565b845160009081526101fc602052604090205461190c5784606001516000815181106117ca57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146118065760405162461bcd60e51b81526004016104f690614bb9565b600085604001511161182a5760405162461bcd60e51b81526004016104f690614b5a565b8460a00151518560600151511461184057600080fd5b600061184b866124d5565b905060005b8660600151518110156118c15760008760600151828151811061186f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146118b8576118b881848a60a0015185815181106118ab57fe5b6020026020010151612728565b50600101611850565b506118d486600001518760400151612733565b6118e68660000151876080015161279d565b6118f88660000151876060015161298c565b61190a86600001518760200151612b3b565b505b61192b8486600001518560405180602001604052806000815250612bff565b836001600160a01b0316826001600160a01b0316146119dc57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020614f47833981519152886000015187604051611986929190614ddd565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020614f478339815191528860000151876040516119cf929190614ddd565b60405180910390a46114b5565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020614f47833981519152886000015187604051611a1e929190614ddd565b60405180910390a45050505050565b6000611a3830612c11565b15905090565b611a46612c17565b611a4e612d11565b611a56612db2565b611a5e612d11565b611a66612e4f565b611a7e60405180602001604052806000815250612f1f565b611a8783612feb565b611a8f612d11565b611a9761309d565b611aa1868661313a565b611aaa84613207565b611ab582600161321b565b61090881600161321b565b3390565b60008184841115611b535760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611b18578181015183820152602001611b00565b50505050905090810190601f168015611b455780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561116b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611bc7846001600160a01b0316612c11565b1561090857836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b83811015611c55578181015183820152602001611c3d565b50505050905001848103835286818151815260200191508051906020019060200280838360005b83811015611c94578181015183820152602001611c7c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015611cd0578181015183820152602001611cb8565b50505050905090810190601f168015611cfd5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b158015611d2257600080fd5b505af1925050508015611d4757506040513d6020811015611d4257600080fd5b505160015b611ddc57611d53614e31565b80611d5e5750611da5565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611b18578181015183820152602001611b00565b60405162461bcd60e51b8152600401808060200182810382526034815260200180614eeb6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146106095760405162461bcd60e51b8152600401808060200182810382526028815260200180614f1f6028913960400191505060405180910390fd5b806000606084901c611e3b611ac0565b6001600160a01b0316816001600160a01b03161415611e98578391506000611e628661327b565b90508015611e87576000611e758761328e565b8203905080861115611e85578093505b505b611e9186846132a1565b8285039350505b509250929050565b611ea8611ac0565b6001600160a01b0316836001600160a01b03161480611ece5750611ece83610326611ac0565b611f095760405162461bcd60e51b8152600401808060200182810382526029815260200180614fdc6029913960400191505060405180910390fd5b61050a8383836132ba565b60008381526101fa6020526040812054905b818110156114b55760008581526101fa6020526040902080546001600160a01b038616919083908110611f5557fe5b6000918252602090912001546001600160a01b03161415611fb85760008581526101fa60205260409020805484919083908110611f8e57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611f26565b6001600160a01b038116600090815260c9602052604081205460ff168061116b575061116b8383613528565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061202057fe5b602090810291909101015292915050565b612043846001600160a01b0316612c11565b1561090857836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156120d25781810151838201526020016120ba565b50505050905090810190601f1680156120ff5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561212257600080fd5b505af192505050801561214757506040513d602081101561214257600080fd5b505160015b61215357611d53614e31565b6001600160e01b0319811663f23a6e6160e01b146106095760405162461bcd60e51b8152600401808060200182810382526028815260200180614f1f6028913960400191505060405180910390fd5b6121aa611ac0565b6001600160a01b0316836001600160a01b031614806121d057506121d083610326611ac0565b61220b5760405162461bcd60e51b8152600401808060200182810382526029815260200180614fdc6029913960400191505060405180910390fd5b61050a838383613556565b805182516060918491849110156122e15784846040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506103e3565b60005b82518110156123f1578281815181106122f957fe5b602001015160f81c60f81b6001600160f81b03191682828151811061231a57fe5b01602001516001600160f81b031916146123e95785856040516020018083805190602001908083835b602083106123625780518252601f199092019160209182019101612343565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106123aa5780518252601f19909201916020918201910161238b565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506103e3565b6001016122e4565b5092949350505050565b60608161242057506040805180820190915260018152600360fc1b60208201526103f7565b8160005b811561243857600101600a82049150612424565b6000816001600160401b038111801561245057600080fd5b506040519080825280601f01601f19166020018201604052801561247b576020820181803683370190505b50859350905060001982015b83156124cc57600a840660300160f81b828280600190039350815181106124aa57fe5b60200101906001600160f81b031916908160001a905350600a84049350612487565b50949350505050565b6000808260800151516001600160401b03811180156124f357600080fd5b5060405190808252806020026020018201604052801561251d578160200160208202803683370190505b50905060005b83608001515181101561256f576125508460800151828151811061254357fe5b6020026020010151613677565b82828151811061255c57fe5b6020908102919091010152600101612523565b5060008360600151516001600160401b038111801561258d57600080fd5b506040519080825280602002602001820160405280156125b7578160200160208202803683370190505b50905060005b8460600151518110156125fc576125dd8560600151828151811061254357fe5b8282815181106125e957fe5b60209081029190910101526001016125bd565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b8381101561266557818101518382015260200161264d565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b838110156126b657818101518382015260200161269e565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b61050a8383836136e4565b60008281526101fc60205260409020541561274d57600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906127919084908490614ddd565b60405180910390a15050565b6000805b82518110156129415760006001600160a01b03168382815181106127c157fe5b6020026020010151600001516001600160a01b03161415612829576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283557fe5b6020026020010151602001516001600160601b03166000141561289f576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128ab57fe5b6020026020010151602001516001600160601b0316820191506101fa60008581526020019081526020016000208382815181106128e457fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127a1565b5061271081106129825760405162461bcd60e51b815260040180806020018281038252602581526020018061511b6025913960400191505060405180910390fd5b61050a8383613926565b60008281526101fb6020526040812090805b8351811015612ada5760006001600160a01b03168482815181106129be57fe5b6020026020010151600001516001600160a01b031614156129f15760405162461bcd60e51b81526004016104f690614ca5565b8381815181106129fd57fe5b6020026020010151602001516001600160601b031660001415612a325760405162461bcd60e51b81526004016104f690614b84565b82848281518110612a3f57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ad090859083908110612aac57fe5b6020026020010151602001516001600160601b031683611b5b90919063ffffffff16565b915060010161299e565b508061271014612afc5760405162461bcd60e51b81526004016104f690614d65565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b2d929190614dbc565b60405180910390a150505050565b600082815261012e602090815260409091208251612b5b92840190613fe9565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612b878461159b565b6040805160208082528351818301528351919283929083019185019080838360005b83811015612bc1578181015183820152602001612ba9565b50505050905090810190601f168015612bee5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b612c0b84848484613957565b50505050565b3b151590565b600054610100900460ff1680612c305750612c30611a2d565b80612c3e575060005460ff16155b612c795760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015612ca4576000805460ff1961ff0019909116610100171660011790555b6000612cae611ac0565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612d0e576000805461ff00191690555b50565b600054610100900460ff1680612d2a5750612d2a611a2d565b80612d38575060005460ff16155b612d735760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015612d9e576000805460ff1961ff0019909116610100171660011790555b8015612d0e576000805461ff001916905550565b600054610100900460ff1680612dcb5750612dcb611a2d565b80612dd9575060005460ff16155b612e145760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015612e3f576000805460ff1961ff0019909116610100171660011790555b612d9e6301ffc9a760e01b613a69565b600054610100900460ff1680612e685750612e68611a2d565b80612e76575060005460ff16155b612eb15760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015612edc576000805460ff1961ff0019909116610100171660011790555b612d9e604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613aed565b600054610100900460ff1680612f385750612f38611a2d565b80612f46575060005460ff16155b612f815760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015612fac576000805460ff1961ff0019909116610100171660011790555b612fb582613baf565b612fc5636cdb3d1360e11b613a69565b612fd56303a24d0760e21b613a69565b8015612fe7576000805461ff00191690555b5050565b600054610100900460ff16806130045750613004611a2d565b80613012575060005460ff16155b61304d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015613078576000805460ff1961ff0019909116610100171660011790555b815161308c90610230906020850190613fe9565b50612fd563e8a3d48560e01b613a69565b600054610100900460ff16806130b657506130b6611a2d565b806130c4575060005460ff16155b6130ff5760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff1615801561312a576000805460ff1961ff0019909116610100171660011790555b612d9e63656cb66560e11b613a69565b600054610100900460ff16806131535750613153611a2d565b80613161575060005460ff16155b61319c5760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff161580156131c7576000805460ff1961ff0019909116610100171660011790555b82516131db90610262906020860190613fe9565b5081516131f090610263906020850190613fe9565b50801561050a576000805461ff0019169055505050565b8051612fe79061012f906020840190613fe9565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166132ff5760405162461bcd60e51b81526004018080602001828103825260238152602001806150ce6023913960400191505060405180910390fd5b805182511461333f5760405162461bcd60e51b81526004018080602001828103825260288152602001806151926028913960400191505060405180910390fd5b6000613349611ac0565b905061336981856000868660405180602001604052806000815250610908565b60005b8351811015613447576133fe83828151811061338457fe5b6020026020010151604051806060016040528060248152602001614fb860249139609760008886815181106133b557fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611ac49092919063ffffffff16565b6097600086848151811061340e57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a16825290925290205560010161336c565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156134ce5781810151838201526020016134b6565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561350d5781810151838201526020016134f5565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b03831661359b5760405162461bcd60e51b81526004018080602001828103825260238152602001806150ce6023913960400191505060405180910390fd5b60006135a5611ac0565b90506135d5818560006135b787611fec565b6135c087611fec565b60405180602001604052806000815250610908565b61361c82604051806060016040528060248152602001614fb86024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611ac4565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020614f4783398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b60006136ef83613bc2565b9050600082516041141561370a576137078284613c0e565b90505b846001600160a01b0316816001600160a01b0316146114b557613735856001600160a01b0316612c11565b156138ae5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156137a457818101518382015260200161378c565b50505050905090810190601f1680156137d15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b1580156137ef57600080fd5b505afa158015613803573d6000803e3d6000fd5b505050506040513d602081101561381957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146138a85760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611b18578181015183820152602001611b00565b506114b5565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611b18578181015183820152602001611b00565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612791929190614dbc565b60008381526101fd6020526040812054613972908490611b5b565b60008581526101fc60205260409020549091508111156139a45760405162461bcd60e51b81526004016104f690614c7b565b60008481526101fd602052604090208190556001600160a01b0385166139dc5760405162461bcd60e51b81526004016104f690614d24565b60006139e6611ac0565b9050613a07816000886139f889611fec565b613a0189611fec565b88610908565b60008581526097602090815260408083206001600160a01b038a168452909152902054613a349085611b5b565b60008681526097602090815260408083206001600160a01b038b16845290915281209190915561090890829088888888612031565b6001600160e01b03198082161415613ac8576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613b065750613b06611a2d565b80613b14575060005460ff16155b613b4f5760405162461bcd60e51b815260040180806020018281038252602e81526020018061507e602e913960400191505060405180910390fd5b600054610100900460ff16158015613b7a576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206101629190915561016355801561050a576000805461ff0019169055505050565b8051612fe7906099906020840190613fe9565b6000613bcc613c8e565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114613c66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613c8486828585613cce565b9695505050505050565b6000613cc97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613cbc613f24565b613cc4613f2b565b613f32565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613d2f5760405162461bcd60e51b81526004018080602001828103825260228152602001806150056022913960400191505060405180910390fd5b6000601e8560ff161115613e09576004850360ff16601b1480613d5857506004850360ff16601c145b613d935760405162461bcd60e51b81526004018080602001828103825260228152602001806150ac6022913960400191505060405180910390fd5b6001613d9e87613f94565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613df8573d6000803e3d6000fd5b505050602060405103519050613ec0565b8460ff16601b1480613e1e57508460ff16601c145b613e595760405162461bcd60e51b81526004018080602001828103825260228152602001806150ac6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613eb3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116613f1b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383613f3f613fe5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261401f5760008555614065565b82601f1061403857805160ff1916838001178555614065565b82800160010185558215614065579182015b8281111561406557825182559160200191906001019061404a565b50614071929150614075565b5090565b5b808211156140715760008155600101614076565b80356103f781614ed5565b600082601f8301126140a5578081fd5b813560206140ba6140b583614e0e565b614deb565b82815281810190858301838502870184018810156140d6578586fd5b855b858110156140fd5781356140eb81614ed5565b845292840192908401906001016140d8565b5090979650505050505050565b600082601f83011261411a578081fd5b8135602061412a6140b583614e0e565b82815281810190858301855b858110156140fd5761414d898684358b0101614274565b84529284019290840190600101614136565b600082601f83011261416f578081fd5b8135602061417f6140b583614e0e565b8281528181019085830160408086028801850189101561419d578687fd5b865b8681101561420c5781838b0312156141b5578788fd5b81518281018181106001600160401b03821117156141cf57fe5b835283356141dc81614ed5565b8152838701356001600160601b03811681146141f657898afd5b818801528552938501939181019160010161419f565b509198975050505050505050565b600082601f83011261422a578081fd5b8135602061423a6140b583614e0e565b8281528181019085830183850287018401881015614256578586fd5b855b858110156140fd57813584529284019290840190600101614258565b600082601f830112614284578081fd5b81356001600160401b0381111561429757fe5b6142aa601f8201601f1916602001614deb565b8181528460208386010111156142be578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156142e9578081fd5b6142f360c0614deb565b90508135815260208201356001600160401b038082111561431357600080fd5b61431f85838601614274565b602084015260408401356040840152606084013591508082111561434257600080fd5b61434e8583860161415f565b6060840152608084013591508082111561436757600080fd5b6143738583860161415f565b608084015260a084013591508082111561438c57600080fd5b506143998482850161410a565b60a08301525092915050565b6000602082840312156143b6578081fd5b813561116b81614ed5565b600080604083850312156143d3578081fd5b82356143de81614ed5565b915060208301356143ee81614ed5565b809150509250929050565b600080600080600060a08688031215614410578081fd5b853561441b81614ed5565b9450602086013561442b81614ed5565b935060408601356001600160401b0380821115614446578283fd5b61445289838a0161421a565b94506060880135915080821115614467578283fd5b61447389838a0161421a565b93506080880135915080821115614488578283fd5b5061449588828901614274565b9150509295509295909350565b600080600080600060a086880312156144b9578283fd5b85356144c481614ed5565b945060208601356144d481614ed5565b9350604086013592506060860135915060808601356001600160401b038111156144fc578182fd5b61449588828901614274565b60008060006060848603121561451c578081fd5b833561452781614ed5565b925060208401356001600160401b0380821115614542578283fd5b61454e8783880161421a565b93506040860135915080821115614563578283fd5b506145708682870161421a565b9150509250925092565b6000806040838503121561458c578182fd5b823561459781614ed5565b9150602083013580151581146143ee578182fd5b600080604083850312156145bd578182fd5b82356145c881614ed5565b946020939093013593505050565b6000806000606084860312156145ea578081fd5b83356145f581614ed5565b95602085013595506040909401359392505050565b6000806040838503121561461c578182fd5b82356001600160401b0380821115614632578384fd5b61463e86838701614095565b93506020850135915080821115614653578283fd5b506146608582860161421a565b9150509250929050565b60006020828403121561467b578081fd5b81356001600160e01b03198116811461116b578182fd5b60008060008060008060c087890312156146aa578384fd5b86356001600160401b03808211156146c0578586fd5b6146cc8a838b01614274565b975060208901359150808211156146e1578586fd5b6146ed8a838b01614274565b96506040890135915080821115614702578586fd5b61470e8a838b01614274565b95506060890135915080821115614723578283fd5b5061473089828a01614274565b93505061473f6080880161408a565b915061474d60a0880161408a565b90509295509295509295565b600080600080600080600060e0888a031215614773578485fd5b87356001600160401b0380821115614789578687fd5b6147958b838c01614274565b985060208a01359150808211156147aa578687fd5b6147b68b838c01614274565b975060408a01359150808211156147cb578687fd5b6147d78b838c01614274565b965060608a01359150808211156147ec578283fd5b6147f88b838c01614274565b955060808a013591508082111561480d578283fd5b5061481a8a828b01614095565b93505061482960a0890161408a565b915061483760c0890161408a565b905092959891949750929550565b6000806000806080858703121561485a578182fd5b84356001600160401b0381111561486f578283fd5b61487b878288016142d8565b945050602085013561488c81614ed5565b9250604085013561489c81614ed5565b9396929550929360600135925050565b6000806000606084860312156148c0578081fd5b83356001600160401b038111156148d5578182fd5b6148e1868287016142d8565b93505060208401356148f281614ed5565b929592945050506040919091013590565b600060208284031215614914578081fd5b5035919050565b60008060006060848603121561492f578081fd5b83359250602084013561494181614ed5565b9150604084013561495181614ed5565b809150509250925092565b6000806040838503121561496e578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156149c957815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614990565b509495945050505050565b6000815180845260208085019450808401835b838110156149c9578151875295820195908201906001016149e7565b60008151808452815b81811015614a2857602081850181015186830182015201614a0c565b81811115614a395782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614a8690830185614a03565b8281036040840152613c848185614a03565b6001600160a01b039290921682526001600160601b0316602082015260400190565b60006020825261116b602083018461497d565b60006020825261116b60208301846149d4565b600060408252614af360408301856149d4565b8281036020840152613f1b81856149d4565b901515815260200190565b60006020825261116b6020830184614a03565b60208082526017908201527f6d696e746572206973206e6f7420746865206f776e6572000000000000000000604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152614dd5604083018461497d565b949350505050565b918252602082015260400190565b6040518181016001600160401b0381118282101715614e0657fe5b604052919050565b60006001600160401b03821115614e2157fe5b5060209081020190565b60e01c90565b600060443d1015614e4157610d50565b600481823e6308c379a0614e558251614e2b565b14614e5f57610d50565b6040513d600319016004823e80513d6001600160401b038160248401118184111715614e8e5750505050610d50565b82840192508251915080821115614ea85750505050610d50565b503d83016020828401011115614ec057505050610d50565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114612d0e57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e73666572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220ed723726f5595ec306b97145d01052202eb5d8715668c879baae7450e14baf1264736f6c63430007060033