ETH Price: $2,546.36 (+0.61%)

Transaction Decoder

Block:
12750207 at Jul-02-2021 07:58:34 PM +UTC
Transaction Fee:
0.056367585 ETH $143.53
Gas Used:
3,757,839 Gas / 15 Gwei

Account State Difference:

  Address   Before After State Difference Code
0x4Cb24e01...0D7A82dB8
12 Eth
Nonce: 0
11.943632415 Eth
Nonce: 1
0.056367585
(Binance Pool)
6,173.361644329832215223 Eth6,173.418011914832215223 Eth0.056367585
0xD3D1615A...23bffd71D
0 Eth
Nonce: 0
0 Eth
Nonce: 1
From: 0 To: 30416231102072007207083280278455121337919749166885139680613536258912080951271447897756583490967634860529369028337851127788204855289517449272158657990673092186764654969910011653113969093534823681259648542154003138473920160801561228993439843757529118164219308682957887017524067832576121551495858708724566072864635119777634381181001874501777676774979000950349706618849043220602491318004743328366860448650570766647858547526968133010423139336847881739443640698251612400365181172975914123670836747805200607937111549002281621923574862236748196441528969896178525619422718482812003803659082819239751952375300592747071608586931485015463622842085982266902372341284543885079460658097860409977419869983971450410146805906359060335067156399403330526435598139647544591636497281887205174541879195375200386848045758667333455886126538823827379334169294227746389935385042493688470646602521486020786695673758960529987319939661850278196620644894744150408431011807709745249800933562618607195373519819417749951646624502820518344059051647166498682264132332062223744255837130120029292546689126550491655576990475416127119327511433114153659945116845539977577253277694749879319981548470653250564860064922263926345355098160753271030972558515226314850774484754386129498794542773025329080292434226895774797069183424392839100519537396875998816820373862253406103292356971899458397136869638340822674157388433361855696087989164328853648742990258079191718070242049362526480740438482523304013028269729178481716625727413905838466825942487128944597159451616981353687188305357306445852887581393141303223245446104437376575970281155912142720991723534532141353394820228645581091331686699708771436167744601443429235782864650645752474377477968202435422199688382799758922897399369055925426061429353843704793821593483497971299513496445752454489704405366159304417089616328551672297507311177884356222165641496721234115820881347949785603364791844984183423682972083954358474889779243793213912187314997000622932380876943508560195323680154356158627143374739249621985299881998468683013702767294945966909995499824171640313341141310141810051684504188734267754849604177406222694663558670259852419969484944668060547732740878591502730951307585968340158256428392895104638953304263471653731912955257195467488812708628691154196293980928130024373095370833270338317238221353483034571161705180974120381845766552062439668621608171786420912423592013937264264434822852037133631761617451109603120178085023354537155295252802472480957584978484317784984673038045805483998033992083309952925682994218719502689136262569494100853569901452664826559683634201112493792354345472951505471222342626073302344254344071848153446916226260408447691642763519170885048112931121797372196241968037495012105764956541763858410396289730960009059771245715242046468066772905863109288384544665828860000196097235602032835663413343762171363075843706484321322877857238013575558439470957699399885340788772717912419038374898276749821261694874898008455670758589353379095913930186510806358828775445385417240797944787722380363612473968390394111175804186954671798489200683897328539409703274926928140460878777332291271822292853139303540624853637872815306368027163023084025447621824999925668539449716539488931222121586145886093046676994843246734773252856317704078129233357972958713149500904169429354249628045700985242046258325899247843393149950308316185389531687217069337814965034396280245532297445880404703384114959828399686504288934583757517366823361482778442452048799702902316731230696672439270432918906132023486655548399241532800719883588997709427195238187777512816363169477765578518057662374637837010258264785191632349959303665968641527373644283810978361609225716389257128718256172998529652289590652063774893234374614283465625047865740827154633748503407075196457934966805650942869323257871486697945609244909150732709310109668293855015942214492375981250916143589084651632422749751447473434907890224922932885261935926558243326264666806317159744090721287814965271701174996257343662618249789688067344241077963580868271334771885823064833274798953956283567472595541134844672015616762860937398171192340045230166814496006716153303495624189091671001955305145391133741540345593511894166218433680102025926122353526053437041823825865080341058911080105241969724939059351555583734238491025045017124726983102697032607599391341224001107032978573856963927786718898196849800885737314672509973766070113440799338050845756012855661548344481793990301190620783254469158806254816184912399149632548382827225786543581876416384089117673846788930976638452981748230029818965133198699960017101747575598142626644400320713485837076747814845912852139586859458826104109538118576606636717835266771033228898689440285122354657212590008215313783297680799039558056456555307784277860426976260333437170807891411763173988630182980635293039779523724160482606660508411821412346647661324766333336353251174076969461096916262514618961171170653257414300238420584179376231208751860700722420950017532357369886774486542813215568377941265642550778791201887353668153049200676342808764531911934025213016125732337651611069785346861325769982931150378117016037830687818459201015537122562633938151809862296900635762231054621097717078301388978878295346617673968308680946341694315641017514641930055683835348034382053912661196210074845416686814608619735539666016448238505682345694781258706361270486476657273695256462982847115173161111825231742451709842596367556745874672355962936120402788833090094692465365421953807573613762864931122631666421281977227348377283998597084726688923748352045367773543350961845224278297355363812030555644791941253494589827190166578432655650202788212217728676663059031129032394772625065353812500121279392486270543595577070478647331658923069249121427790041243162659296924552631596563139798782048313858622137774438507159337525665537111796568348828287866378562826043585118097043087543932562208920690532580637165665470881116705639130238771057157897377622391781570474757607567815658407572527883585358308056990115669354755915184043337193375522913504839880856030360878688710239165738388799001649204283502703008326261557537979355003319108624220488920641921305326878932492170841592600560932065075081900152952161804549475253178406264922700126081923113142929539758255015817945253446535362440129440180747379244899746274338233257732089396263789575711278670765438530959032812136596426726191806845592073248772602069298187436594251602995913426143343580783651216942540109267804369705265078544434601906183395333307980414600408725350314997057051336555465350921030242157397747078029554874631633170703871435863452225238161810640351903185729095568063990654644888687947836213287135748910080174453294888371332541662125433576013570937568699154205490536485247366900289279857112777268959846560863248369439997582615879423681999295183564942656357938366494999452026086559197379311696445563253239711246142942655599750152879620790941226013809566249164718824201013864232731188238560861966588819833056419040157568675447859127994645419858184863949246852294334070965267227790717711416983280822826779972017646407833235090403124560664653783659140289271322176530792677624112698587284452241817132689712715651873892230801342727178796775047403579599865814043470443356322042521772798155253406853478662245764971213039898713784764809980433394482429772345110983330201737249834061208737112495316659121208755920335518621054939231312787470252540759101726154612516656856739906950887195679424197595554490611670125637727506051699130085214698664000282615334620448724930945949027687440931750298544978295214119460389519342484750565987029685187242769546892017512710653045773517767787595870289833093724117094572402858237500710212483387207910426025825742536515301855156657892502344968623817930874142938880020245094425364829763417939884751980497565163870887205118830388714643816965866649357118490277377122362940530360336899297603271340699923806434699561085099626630790991855061812614728875693039993059932617015887434990598422657851163249263991952193874514910083384316067063611452749172670212203888069007887079837266644540285999715792784632560016894593013747211957939832110466464974333001761002502742236491855928279110507469213372128298389414258919293840228544118487769803262086854228267037160749227668894059898035086246220423789918409297870281247916692671540726441837855108144186425105115033290970794538365453787750767800456440414954165157938546156517821465179924424111775574304459057876391450710951988515295101643322636116424933178899069261646650309780252346403875114698002414247403826710115674807860952920931750242059957894253441040470600741903838599742164379075205267142328625264114096887372649961484835427440681417019249827037481019643941446706623776836996997486436986825260052092339248949318661801888676691027536646927268211178760405217340492663852032726570559833793555993819987707806524701112683582554483096813172284911951344124386471671040672347962866057492488181903030715135136105968722193311815792503984203647998523406940346009647681148043490229710892440558674833417567134605493624270300109763186846520190182548788533806063716532109784801843618826619965255450836643414926471182839890368016370933273953437065908868421150906820872556008994804200112575891325689313823591887956525690132950327833973151903435252962517655208699141211366991095015079013643926114424803550742723380206913135897456409887222248968369173269799304369165511266095827851415573904926111365811607210713935569629583657422164620871230530006074726829493323691038427501443718714289793853567214757653840197684700701096813124548570367370735648983410180290318421987197836725982586603549378144668674881823115469619832984566680782545922606606641699664106190841931145468381871710752452374975507719156861523975916773251189950783000650489288318406793368997933606618675401395188495326250258964903405287531970468332106546239037436027170493776040107159888210370931046238491173165296057061273808735142994870405908137477473230410465337147358893021019957366855295517822576700119110109355274935503225140964779687261723425507226872411070863776079110251733831603786032654045588031151027904023524690748156927533713387854026821488996818910826876343591020174822261642672030907794775150124374019704035541070128094617652915474215044152776579200700197068445971222430382980094848938287189967141672102385843075100360937724762186655756296976885699644622677401354301032933615834482896970516186549022967370490051657539123781679615265010731920923474851006739472029248555870728072277002629483957449597565206003956801666889874540803725169651238378603762953292621135474754102541632118542856219746542656868347813404011663356026371510212758121920556317705250406055848963589444030233550578223643980563641564778579567006664922017759888316739664856751161653560779359892521601247735159851049751656438602441198931968494083001676688328201041125368039441223433195850048106285427441408772206315033141880592811440024401695499560846949875692946971088399916376213492601566355822693618954519416960197696187899669491461093418167296467193582799095542560605977351340307539207087389574676258840571886542082107836247447481023360577767508487874647911659990059649210801952508503693560336863929200819612914548891590765669927852413552094120940648742534308648842559899568161167442900568570369779068994069664439483273528641462144055065516055686237679759252712315396234522530336055631136863224996823643788515217318093095780288373169864261491901415099733638347472520209349348471813921888097039661782407145015145404630758007403089686750720350798978873749453022672462007797295386461688750393510590606537141350908576772370893641447478020840049558366311453751046249679637842214714088182750908959609220475512256146575699156413743684025623377265430853679720696069708615737972633585876415476152133265459771713935553548692080728202893250602809251195294435016851119571859963308481348094796168375161455728899575705603045748010416057601193997590412596841314708738262942042002284580705841563146085940975392189798955752277894756323511629089943588533160642346627619060294854663987013009125135690253826379684519440370136766709774361209875111559510353819660301629565451072587415962574127463392725649937610708901510653110071398368357680447620717727422573993985998985453000028067999472772315180814487350494730416869840487747743053815553083383828451339962245949195953661967804452128936545940052976818449115546785130143400439616629629560947069297979727335816852751212337488564048299338277450005999527703079513421736810667116260201165242763608147182497808248574685956091105628238698397458186019629442998397201136324839918088558618242997693194426975117882324998449566675657878304396736748285271015938774378217168907996102953305811883290954440311167635391294518864556146332253527562223388471935176735490076176248351506949612233688758820002069275522649328094824196438543809020384143523271148887761913829078705365982802260786329168606588302113895742485507222378865286156183011858410064602962548352709049748992010679152097763325672656663064978254169461371745338514041537927472193801196923297730475707752848633887338835928784280239702933449210908440829126630227706073842097275769023154220891242606016868541864250192485174298563695881287157014103728731197593543694945556278592702880702286999284392400217898728718986100324236753226444146267317788237926237711054898147856817057173504435010570526572613303781417091566397873975563125614969107437054000936313089588085853345168052412429715443731161134211328178913120258989150668696097595000242958458307525880227062509231135353606909287858740705677034727278258806665956896644310925920018332174908224359745583060218862907535593286467882069514794727525097764296530224816568352759192195584026084274822505004066826014166213945873157723367443624421118256683877639308638124497901937508654726355203600869762641702582605708796271395483220227679210328807979747750896499466664512492694352979008719608540204830127697358000348124769393035560499780450783904012266196697912448931972765010305795803917196440814032571951573996482927514699107860094145777759740962277121841687037984828301631424522077822004786337853416606544304101134720434826923105267019082116970367795596247552471828019887877633447018482538228451959586504012530257886915362484339285896600740959677163556664713695669929864276488738910543977869907468410003923259864700505072306648082448287879099805367087467657693420410714358614281667715568734556188082769081749504965605653060581455747640471098035568592645507583440061271993419919643364483665661662168554100213009033555562700922653897939799674790872822065714243603892383650323367407603321861929566393049749230832770796034103613165340091405663609383342720527180302720423738319508290235386942099236196231771904022309290080519725440101854165405121042036837456736542627253370139636262193087485817498881102909389867257799511552621335484843846592655705966452311133336083738753538862332631603964528255371110292004587346670855397309406330042935784797725450729340292729789395410748637829279745034314077060222295479183201682878758828114319020649077425068305215822404715819409242635194588777913860051452854883170044108858932575244894811388420286935478801730702032698928503187519015079453933662974045276972293603644738593288454085391651719536719637518409202450852497440237971726772994993399678104113167767762569475776361412132435150683144037469944849505987662291189680225504718936140119489101278319474668348881835107231180814013445935333551464203564342554880497626608735065126410127239198691096711813893861604284013647093913441265491158605422564254689185439060954520719290067400998102902626034583582282292560968017155066571194520825361135954566514388833171173790728034854908397324883693599737267946556657804634634341698779719834152542957716531432214031465667915429575144593415360834154374153757454442591901174083979136911001842688992288980167370823007320207207736856141046445623081956631825405924332206052208502407385537304404512076571482732753465993556649635102467556911866448673629670849282273627875834967468424526936423042345869324337913074385826032686381528719583674796470444033572919791768889535687695011714079862577126036506358685981770151428772155037689572630491380900651282508706371528670270091922083455731477168905434792951767524685929506867414017346301147235770543753905082246196135614537658101940257513276287140397835091344208338573651046481798996056366923883771780947734475141563329316879696034179019406821598994196479262132872973455505593579847845003487208563926942761640817135457259504611544414330907197827081883666314983148396431132951640949529865135509892343809410085684891257875847216758276938875424573710402411691401814724285798597027388163846159448336788494271910144438851013999549121577519009749655784745480500683883568575883097808680523672716701748756932797724979928373870353966522790484453890859515434684679856718281552848326278859041112126493546473807651622521665099147796937033814450586275162160360119429485785366623637219132662484994320057591439499309139346897475606783849016269119626221767417596005631864481300357920830326025640325366996923794095316222847932996525525241316744705778898410637415822979957718347172690582281270779833353078723383459834175678621333016613177258405097158055750705737013589282566367850947948643156412758904622240021822769184368524783688446093962696883521080060767907135578147604139118562774971856413121971199352849142843926215144856835408230869403683180940695898408044384583501263395458350626612085200301595769019456245824495653753934257256718999761950435293109116806947372782074329747911029610088921694132269598766981737767071308411900213126663568320415896512124352373015344836053897601142559254717938481382704696729472519794860244513798294492867303713893488478680813356575672117294966649672404261875607034350496580897695692144956533451203806142082342572685462891352358167232008066579505906147197130978345910415929918520050477378601963329077738323399212564578674292051494465011436836389795116234383396765383243375470837402451605017199738720887354900941175232784683756945477921107525971195749091752859287983454958008642743778887185724843804447033787868381676109520974338859845398272993892998088332398299818932895113106850435929644266101638054488972239039616546189395295200518458838002040125472799726174359948633487706750505838996857360344954690630327692311511787802275478836337264016600066254515980266528577621038462650355155395650632689682465439370139941050409789244492935546234075238211611252233985368492204862204182397337716190040197004357878745942711315792035209248142706113045795748725207800194104591014111890163431664756859845893461652726600974255614726684197424174031220528888023385120563030151710263847571193757067208259704547887266968224004074084902851233150182872379255329404432690266522957672684141795480985303043825044290595668554033258353577083349387065220890037218522676820183788742288509119048700765956496514401478733787420253422954137245632124599403329492119195059625579529454756907081831494322603271823278960398935473271835243105007058923684066941346431992602187854238228117144460174829911819935022845471891619153906587574797559041161474465550182426225502386488007044757872815903044711171180557996643555599412489044545018922976509758280950391313755723193588951678161995495627204775818457576256666560287560116988201909444947073853700588283898898225958243651665962835434091902740100257627641821398556712118209271303659264836053633026024865692139135744662084867356055974747154340783905031929764094296407792358883973292306731601470248462521210497632329406342465424899177812237057788142071692444913850754718570451958874485998867824667280947516312231977336149039847434179400840756519004748928742037068964409449457420463019213921280078730099301432988070130028264920117883887162083817223787880495457736520454482681008243093894605945922773676823919979267361680453979439462813158414805722212811223649318060252776560027313061993460460187951690321864063861723205696030931178521860994869830645979069072960345038620012340888462253068737212454979493238671238887368060820120982055885881582376897811040644724512749407761788971592486430991422419406159794060053733260656625884779513375552381669861932413990128069411305501478305186707967670764056104397419456441943437939049892699918595393481271030869730652303121486895391064654372635608820859314871233619828071683439815428361828927343641732519594676831496037886445836213336968127147160311583131781385140920728097176661377760250766971657171376296451466377369971773146526186973495380297892549965711866277712880930823066821541207994328490824094169939458490723183042895328924866495024205946040490318622980065147922066209776931877300865769270052098384393723019991819874867057110453895962754076536500929710811595838344859410745301265426196918614656771979943398894445081947005867204058543213223906862358182675841816598842872713274321876786727673671147202934531364099472481876646712036154833389206641021897085725601443105950128609840630515072048957425129981002709192522595203415420056219965203579437422025471287134341009941463289939646840795900338902532335669854159974113107673492699591779578485084447223751640235371277793958427569003462443683628677695260600629378672766009074545105370569137553592988471553333811264368735765674992441400192182506326886500517935590880892062290124920944092879398233323304816475133031195026635116773513115619630954845503683217415519194733040876122284560362906609466936313193986307337607300003985638560038089970668337445730556366930788223632292004774215224611510067671956270311292771447641141483313013051030087581603207699066563861907878640814009553096631707658376842895689301416626067421284564950513848202118072169747860931562751977476439336780255620034144087298732223387475692573581497904061902610017504845485234457732957555344524106493443520070737791222054685410624290240308594584136903651566046934000737850449735803923724500918972190252126318458689077238461072547217653160573884089791516306340533896925411090113351852534997487013492473017815643686036903695831364604046475306459609270856817263603083661043107868169270742199955717680322389295513532690415060330978340555124919596389641850983043841802417925995901091250804262757493292277703413558861387123074255844780900897089216811611759777580438779608805691848944876236811157211226756821736797449165062972703813008570030395269163527607649355797969572989414506122666450265250186678457710612260905117268548204357747062299072816623480822537388602200706293914735451684433334526568683386874100644515012195222380542501560146798433117472417306936425986246981676851018365742503320812086647537026413585113071918507970298198845657747704578736525327280370747731882594328481661084076803589924253735386419167474835081836379598943428118886554735043382259448212561400354762763381220902671032676853777637432542855061982467166926417529589695675516792761139589980390116379362423992483120534635262970351229176244317072123944573969442214879611914013780921544044828266973951983040427328069297817358238516219853913685030008861870737893029403421263910662389667996797547949247911803916029576353551058566545805476285569313347089516136575062465972219990501950949125741571707355559434487362395682993494979359129434891821089071220954974968591617296132461039571672399261698407110361947272360257199536294943084246435379040435138037145226375948662614558123065198359956155197829998449827689593958136672269878170736557062931665090489321646938959780499605874666328151021714442906601258165021842531849696140903031367766463826181780516178424515881759320085231360790720840034053376237837145515296027622158468593011208778211823477720111627357533831139996199199665805757731163820974893802523755010105791152172529772241338749680946926621519583192866111446009299967461918247705448307912029772272268178260169257210637696902532094455288174904270980987617730725900654473153138882314673837021736680854674667772338693045666805980926725800157827417754776476948169448797992895876150219202828730573756276326367853944236417707587536346305415353246813800769601329187847131485185353487150824659347093584816439676436782196943433643878585021399675580838624848401117208674454367275992472782328280544125961267049106557933331334758063489415399444248259656610357012906137477697324056952489703388607720657566749360726224068139066931018206065393122831296433543976166043186117770434936832723715203296488700567928744516886566516479040900592652733037814750522767630400445169740944243959802461020353309770666024793530526426526381793725142973721692756922375863433325102922876338366071819714949643723325677239077670791520157999619955163907068080048902960763890620011826046758003438574331365248496369043449043409005208222940044736717518746713673372425791778667922999713772376098369019519489048103783341405861119383100177842477565640040799930921823730389935428640033696147783807585041255929568110616785118657448274764846774709264913091617787466168991151682400018803711942855221558251468983653179636526989662284175247660565575117140232533513033257443734649597092565018912142323438693674889429651051963804744798007451650095662483746463665411174050563568706396208420810162249940856466499189294651390140593857592624054966689569220750386448290030324368624051648944513959306779162902076918516384775354401372916267660157290775740085134722244275814552913323182356319700325990223003460691900887301709701450056578704409121131377926936013351390009617898433865243243323105571121118658519547597710951319666479500677025023591100690809054767709406372416812733933598379982838354650680324732412169593028684241204071900598292657105563265090473555798360906102249682090367563016261058132666148591292893071228225018544350017462006258269306986989452809644315365092093797823336758242718376962730117652063892244970928209976671154290275884014235126011734576362873449851723891909499868316436212935787154261096949845758356579193828593233846561359361707233860020988141554774050726932552760140121260236133553860604743956472484189418251502016010943822971663611084033996420072065702244984729913747047727356730820878454768384483595163221495105618516581076342934250668689023263063524444617965381038167621640702843993484043385375144893946244401157822498942799536545597237969460126209183812236896294085988720337906732037143990493077249269304633006381669649036536474550565386017312636874272996862984721500322785368963783583576881627238013379747342645915691799470601328051067598179777334013546091796141859694492800666136458169794444705612720741941028225680736776811837579571944013780455865020303359021688240315595121002388213277471944154066060784699497706723912963580898926897110292333438594661553078590446858085197190872868477380160242126992634828401745192897092417088506611842068784334592145583669716475625839407752322388824277522056254151150663652755311201189776931502362619664560192013075717242553987788987609108727169100888829568796768178703020044116275413975318404234871745373061585626785223234871974055211944748364121209495519564319970690590968584163204661827894648430117287499626073082313105796427229255380517985089570448043484059060299968334822679514324092636215222939509871689869661373474084634057697049650186499981864340333805604222337627722297632725143339985446914753193391558942133672112028638760063641307138866423971147123513491277828340998812709651491484165005623589069219605856117800207951099059514882377968810460204714349770897346603370552232269218496108909881790362471992298989032790235248306056661082652057766235652947782328737574158475681532184964561639107127166869948933793607829044504079073184838938327256171796223047599368738888483130372561235576565039234475701286640171963864303989633889806840569102017167394623421106523105353935617318661454064125905584576283932178255260358729577219207572746266484444062340557172958489615792627290253038258965246693537096281848020434684049953493455739325412191547633965298470498773951542728323675538816042214134370424327265377778099893675870836257355562467655353249830647803488068335748424624543341689268145643640391189084921122755053457177922466181715959497593477284021007781347748828418650007659346034426003946199031253573241538339796280665332782707099381710912188587203983546218002909679570370404208132381807432280976557273318572887251244686527600146942430049281009824299882011334370022121018630232702203051533300948374445673667449312128643319263437841318881147806411516864224236674885618827029873354549444494101827245356567078276134313591648431726899588541626834301600560652924712444274558758540509376598545001017882077663111918364417414273184711613546520135818718374556592005325709109101678868750898068472785839480212991936975266553241201110295117335347317438281007999821334300272883087848049359878273904578784982780702492676967227648395146218019902591266299192360694957766097782802678083956125312358705622480368405413887247468618679374838111219621410839393151994081351760720169898275449886551973792438980742069113937872264435820082149476223405734962946749198043595363111185731652395919775249473340150433789091745925511620375040959070058447144040710668566386490019106239313019880805076700938510404624418715547151308842543758393466236243192133680661884038485202365271481011814413557323460123627445942944368673954896160173244303620739226750701639893148834213734500351607706808069137891105888204842779971448954653514973215290708117705768516306855672596283895981761142236789303284784207222808068390340753582634795403841538430267673348811772796534849721698768701735481824345419240443938778285006541517740912381497547584292303875991998703931925989237828270897673591786760286213803445036345253700382298607072975510272034042846126113089070471370255160645588038731288760457654955821323523508644529118373334284041698506654204430050954816733001923094410251077574975419260368591221636857246973256270618451212110674040313519785543585535770400797813081395412946983360617033225263212034008712350468828182004305968749519617419404814414876098616687251433078664829612858756196683555702676750104143362987072378757997193099697362374433946614597585229398659895938449805535406306411758194236320672269038138186123449181199006207363548402556404523563563629067547329724149501556670557478371741210017042423555816500547898090776926806183793405274319554199530342745403346496621754532285608289779033501752354858678544532663417684756323171814688175193203003309754607752616066169339631817340100311628610562650747469423711579441814608433972689912645966942599793021588384225565230996620748883119673002520812336044026877100424708621173886209283943331284967006154087090628825139308762433052529855109188617570641096070260273277130143382853621292246737280026147813871430185446453206492621970040967024112412391402680915380370971669713969851011228999070286258810415077759062368502609177327432445685010169276841236012797027102288726708661864841088609990944365140467518120073850589535975198043034609960592301754326660828613898136645763830510314704757007591315320734221661311758798270981272346662719299686629811784134959241780703025355602913419081204026201704984227941451698419333766490263470624125794167769629470378618153109409217984723207421979001283627133773836561850559913925108166402003226880313539429946785928449795119787055588741022815820983144640218182833068906704019757833619209054923660631380883929933398530132570025830867315340004338551954672808050794064783512599090634733186882257101793320286439998369103761408196683589545764240687986829621213419933755252433910287755588001404558650196353075290082544488840051533162370360889415569915984740223206616200072828954166757419241576322865583722765411684135495571976247067706493634639990316948081033234636041611819812008522541015110903756374242398947734469420211879850220454325515851378127095818778705112983495908547443718002946563387750938992218547262201802663792878146328304525941781519592609198519426592941647878581625389292981797260257932550299343974803494491146652965059354144075802205213249461783974431586447748158171401571391567457988495746374083705555852364272276650071149633740791533310617307660382673482739956373504374306390317202293410414435261864124517729761438972282833171475002188273187547459560572208601643949403867976865077853778121318537267014410071025724782706741312518635837446049710823583559006376100843595362851049348951506438856137996947029047738413951599051760244797618927101934706142051474033060983859079192803758914070399618972912505796353353809097736289511699421071659125683530792340790833542604268617753180034454786121885132320818497322459013705485859133723518750432032023357410656908112254212324104459960272132675485959430332676664754981195550649787138797487068385742300603823394584711634540707501157971207005738616970274314076685203667069369185210997483875455457574837647617029748053957753111331524403102315832957628827649371156895477894462684964723651572668179955968835219919704861849317053165376918131306649226321071372585238169034735001826306308341028826071554393089526324562689376069035071329384780450786626925941525063993092899992248355840640809164598339845100358220123005153033234594221545957395790868023234917448625581862166787904500933625268272021727397531210178362002937854853472614188998593406090851932618260534464746951757735740918774979243918249426714397491992001016334050329703193989778301718608019391934021973154173749758600754455701937256066868110447402404747365912716286986723008128614883806394962956068490793564389644665878422926061546120513543098130906924699830939869938921242986380303281512090758108553833553907706455595174310311292967956764631839635160974415831020997795828636508101903342738558233809709869457289488009003200920662470643748718986890534901189538466212026360583851848113524916706050522984896895170733873084709021165330928482881115598275857666081848289358696639562257101018662443198270091491044017375729411221276833386046947288410069036471798503170769775947856584480854978526410294415218970260197559677396089442918582276965237515899034205493822824017339478342624011689614038651437310474575673546847963816196582887146382435931569664322703753185426115981145317689055207860243278676142407071568032550635772491071865387575051029178641686646252126078073542114229688009139146500045109952127530666906082941554181513607613172851165802617282903172714091866543434084672419810258471394031893334740124495210956293828608916626515996007371278853300224804382104892397327056682956507130150503781708752202313548002669652040746199333183166169410906565315466488904059873647792676811406111936178053054707532713540602643802719522808941195210348080683874965643861292072683757884585248014573335932204979809212176460181010063993903276108894889592591657558018088597919827991093712165847955948225030655726481603428806738471261732518771673513670534055290789675666644075997223719382784770848401080124281750691355315251230179728125181917077992627308031075915738907966429705204036903490358201992358239782876249677207090635562546407865919467413118404909301818891779878470303471883953527751593148969048070095986789208901949100158288188872534022931531466958925840321200990511538387981886861646959503892177843435077080082606770204360264981258068710372974921908950478104923410307518695205758862116262431895754043644299907537220996312812615400440155627834093491994370560594159673710269268020724325827987438962970932329246455729938007597159259806576201448806915628359341310253549758685355177989381638508034603459613094695302351370080004695196911831363502303662905906513146479242245962570262282045416736380797087928976343246948057316407307430731240031070446052069320301687579686997250968709619218484394391862809972937272197591269142957583488080108815203654320884555052816772022237983263445208880243492895856050237747636037159327798825356579176792072107216396031199286488291362511708161568842429196603104627513901240715458544011894441471004485605280701716848958988295604042158821241348280314321883131093660782949643273826992516065556406816953632545073528289087138672014507026156622299672315649048933845013852366207557117557835308297265349803615046454423978359908581606329528828920777826702741304412473628802754123158345327128771065696304158275624096297463661777227960318605405470606855743371284299920954010405582013707753771903967380864335486334362972696899202366124359322132539517091567456155028901622680460401595434863265734560700734688729633500368137286262687785529709883376756438145286161579475901817940271104582362622724732481832278815984157461232922574296005812802528653854372155976960684478150539766640088052537062133880910964742645680622582718846875046380267528816424062748396983992278239713830150966535179799472311412001406292036046079109897217050093111112797868546468460311736881088740597476413498106311596397910001132146637280375079419108654031947543617427753326810664279960645972034491052772480074782427642519828083870890905749878912080961543987973533972445346245917709641119329480718899983259459275014535146288864102960395713846376976696183471184514553057357358955085485652672197275105244221739254030131338545150337531729098160437026437064194292216383909036752792532221589490766367010953168000228899680640365466033307056126580781904302555019422816103891482267642695098363238243832210934863352931047447819187580557239878303245531255370958582684275820985718199783532360405803868728835538490528659705039968903446637934817449895986763873337766435419047336383409078635390744742032294582281674579396299460870860594077254897449597792799703380573468980624119539567352263119288349161943712766655115165028752583074753500341020231868846845505839174011311801772284365628855312356279723550719359604548784171969072517641890201829359115139737944162454675842356570766395722752671456111650951276497861064666868869782496001918502374691253521203771678348600822959666044068301827217566561953417077356981416453682877788043670172162350211232672356305406711392321516025335621328014233641552506046433144839874025214343787545184032635601675478991638113524204801487945258421333485701869726120543911653544002679712687360136143377814325167409266600965581119858826420043272004945745888445449750029989018717013747773512564800139972816970227747689190044468798872466162137326116691474074563107983294138607589253737921042286837067568697593519915549943650694213570686140781696737649220849568117737927302771266711151656566835

Execution Trace

AstroLion.69d3c21b( )
// $AstroLion | AstroLion Token
// Designed by @TristenEscolastico / Tristen Esco
// TG: t.me/AstroLionToken
// Web: https://astrolion.net
// Community Play

// Audit & Fair Launch handled by FairLaunchCalls
// TG: t.me/FairLaunchCalls
// Twitter: FairLaunchCalls
// Always verify our contracts are legit on TG/Twitter before trading.

// Fair Launch, no Dev Tokens. 98% LP, 2% to @TristenEscolastico / Tristen Esco
// Snipers will be nuked.

// LP Burn immediately on launch.
// Ownership will be renounced after launch & botwave bans.

// Slippage Recommended: 10%+
// 5% Supply limit per TX

/**
 *  ⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠛⠛⠋⠉⠈⠉⠉⠉⠉⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⢿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⡏⣀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿
 *  ⣿⣿⣿⢏⣴⣿⣷⠀⠀⠀⠀⠀⢾⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿
 *  ⣿⣿⣟⣾⣿⡟⠁⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣷⢢⠀⠀⠀⠀⠀⠀⠀⢸⣿
 *  ⣿⣿⣿⣿⣟⠀⡴⠄⠀⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⣿
 *  ⣿⣿⣿⠟⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠶⢴⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⣿
 *  ⣿⣁⡀⠀⠀⢰⢠⣦⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⡄⠀⣴⣶⣿⡄⣿
 *  ⣿⡋⠀⠀⠀⠎⢸⣿⡆⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⠗⢘⣿⣟⠛⠿⣼
 *  ⣿⣿⠋⢀⡌⢰⣿⡿⢿⡀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⡇⠀⢸⣿⣿⣧⢀⣼
 *  ⣿⣿⣷⢻⠄⠘⠛⠋⠛⠃⠀⠀⠀⠀⠀⢿⣧⠈⠉⠙⠛⠋⠀⠀⠀⣿⣿⣿⣿⣿
 *  ⣿⣿⣧⠀⠈⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⠀⠀⠀⠀⢀⢃⠀⠀⢸⣿⣿⣿⣿
 *  ⣿⣿⡿⠀⠴⢗⣠⣤⣴⡶⠶⠖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡸⠀⣿⣿⣿⣿
 *  ⣿⣿⣿⡀⢠⣾⣿⠏⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠉⠀⣿⣿⣿⣿
 *  ⣿⣿⣿⣧⠈⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⡄⠈⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣿⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠙⣿⣿⡟⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠁⠀⠀⠹⣿⠃⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⢐⣿⣿⣿⣿⣿⣿⣿⣿⣿
 *  ⣿⣿⣿⣿⠿⠛⠉⠉⠁⠀⢻⣿⡇⠀⠀⠀⠀⠀⠀⢀⠈⣿⣿⡿⠉⠛⠛⠛⠉⠉
 *  ⣿⡿⠋⠁⠀⠀⢀⣀⣠⡴⣸⣿⣇⡄⠀⠀⠀⠀⢀⡿⠄⠙⠛⠀⣀⣠⣤⣤⠄
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.6.12;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    /**
    * @dev Returns the amount of tokens in existence.
    */
    function totalSupply() external view returns (uint256);

    /**
    * @dev Returns the amount of tokens owned by `account`.
    */
    function balanceOf(address account) external view returns (uint256);

    /**
    * @dev Moves `amount` tokens from the caller's account to `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Returns the remaining number of tokens that `spender` will be
    * allowed to spend on behalf of `owner` through {transferFrom}. This is
    * zero by default.
    *
    * This value changes when {approve} or {transferFrom} are called.
    */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
    * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * IMPORTANT: Beware that changing an allowance with this method brings the risk
    * that someone may use both the old and the new allowance by unfortunate
    * transaction ordering. One possible solution to mitigate this race
    * condition is to first reduce the spender's allowance to 0 and set the
    * desired value afterwards:
    * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
    * @dev Moves `amount` tokens from `sender` to `recipient` using the
    * allowance mechanism. `amount` is then deducted from the caller's
    * allowance.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
    * @dev Emitted when `value` tokens are moved from one account (`from`) to
    * another (`to`).
    *
    * Note that `value` may be zero.
    */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
    * @dev Emitted when the allowance of a `spender` for an `owner` is set by
    * a call to {approve}. `value` is the new allowance.
    */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {
    /**
    * @dev Returns the addition of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `+` operator.
    *
    * Requirements:
    *
    * - Addition cannot overflow.
    */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
    * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
    * division by zero. The result is rounded towards zero.
    *
    * Counterpart to Solidity's `/` operator. Note: this function uses a
    * `revert` opcode (which leaves remaining gas untouched) while Solidity
    * uses an invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts with custom message when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    /**
    * @dev Returns true if `account` is a contract.
    *
    * [IMPORTANT]
    * ====
    * It is unsafe to assume that an address for which this function returns
    * false is an externally-owned account (EOA) and not a contract.
    *
    * Among others, `isContract` will return false for the following
    * types of addresses:
    *
    *  - an externally-owned account
    *  - a contract in construction
    *  - an address where a contract will be created
    *  - an address where a contract lived, but was destroyed
    * ====
    */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
    * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
    * `recipient`, forwarding all available gas and reverting on errors.
    *
    * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
    * of certain opcodes, possibly making contracts go over the 2300 gas limit
    * imposed by `transfer`, making them unable to receive funds via
    * `transfer`. {sendValue} removes this limitation.
    *
    * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
    *
    * IMPORTANT: because control is transferred to `recipient`, care must be
    * taken to not create reentrancy vulnerabilities. Consider using
    * {ReentrancyGuard} or the
    * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
    */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
    * @dev Performs a Solidity function call using a low level `call`. A
    * plain`call` is an unsafe replacement for a function call: use this
    * function instead.
    *
    * If `target` reverts with a revert reason, it is bubbled up by this
    * function (like regular Solidity function calls).
    *
    * Returns the raw returned data. To convert to the expected return value,
    * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
    *
    * Requirements:
    *
    * - `target` must be a contract.
    * - calling `target` with `data` must not revert.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
    * `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
    * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
    * but also transferring `value` wei to `target`.
    *
    * Requirements:
    *
    * - the calling contract must have an ETH balance of at least `value`.
    * - the called Solidity function must be `payable`.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
    * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
    * with `errorMessage` as a fallback revert reason when `target` reverts.
    *
    * _Available since v3.1._
    */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
    * @dev Initializes the contract setting the deployer as the initial owner.
    */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
    * @dev Returns the address of the current owner.
    */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
    * @dev Leaves the contract without owner. It will not be possible to call
    * `onlyOwner` functions anymore. Can only be called by the current owner.
    *
    * NOTE: Renouncing ownership will leave the contract without an owner,
    * thereby removing any functionality that is only available to the owner.
    */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
    * @dev Transfers ownership of the contract to a new account (`newOwner`).
    * Can only be called by the current owner.
    */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    //NB: This is an INTERFACE FUNCTION on the default UniSwapV2 Library.
    //Feel free to check the contract itself - there's no implementation/way to use it to mint tokens.
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    //NB: This is an INTERFACE FUNCTION on the default UniSwapV2 Library.
    //Feel free to check the contract itself - there's no implementation/way to use it to mint tokens.
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// Contract implementation
contract AstroLion is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => uint256) private _lastTx;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public launchTime;
    mapping (address => bool) private _isSniper;
    address[] private _confirmedSnipers;

    string private _name = 'AstroLion | t.me/AstroLionToken';
    string private _symbol = 'AstroLion';
    uint8 private _decimals = 9;

    uint256 private _taxFee = 0;
    uint256 private _teamDev = 0;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousTeamDev = _teamDev;

    address payable private _teamDevAddress;
    address private _router = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;
    bool public tradingOpen = false;
    bool private snipeProtectionOn = false;

    uint256 public _maxTxAmount = 10000000000000000000000;
    uint256 private _numOfTokensToExchangeForTeamDev = 50000000000000000;
    bool _txLimitsEnabled = true;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function initContract() external onlyOwner() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        // List of front-runner & sniper bots from t.me/FairLaunchCalls
        _isSniper[address(0x7589319ED0fD750017159fb4E4d96C63966173C1)] = true;
        _confirmedSnipers.push(address(0x7589319ED0fD750017159fb4E4d96C63966173C1));

        _isSniper[address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)] = true;
        _confirmedSnipers.push(address(0x65A67DF75CCbF57828185c7C050e34De64d859d0));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _confirmedSnipers.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isSniper[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _confirmedSnipers.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isSniper[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _confirmedSnipers.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isSniper[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _confirmedSnipers.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isSniper[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _confirmedSnipers.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isSniper[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _confirmedSnipers.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isSniper[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _confirmedSnipers.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        _isSniper[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true;
        _confirmedSnipers.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7));

        _isSniper[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true;
        _confirmedSnipers.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533));

        _isSniper[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true;
        _confirmedSnipers.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d));

        _isSniper[address(0x000000000000084e91743124a982076C59f10084)] = true;
        _confirmedSnipers.push(address(0x000000000000084e91743124a982076C59f10084));

        _isSniper[address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)] = true;
        _confirmedSnipers.push(address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303));

        _isSniper[address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)] = true;
        _confirmedSnipers.push(address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595));

        _isSniper[address(0x000000005804B22091aa9830E50459A15E7C9241)] = true;
        _confirmedSnipers.push(address(0x000000005804B22091aa9830E50459A15E7C9241));

        _isSniper[address(0xA3b0e79935815730d942A444A84d4Bd14A339553)] = true;
        _confirmedSnipers.push(address(0xA3b0e79935815730d942A444A84d4Bd14A339553));

        _isSniper[address(0xf6da21E95D74767009acCB145b96897aC3630BaD)] = true;
        _confirmedSnipers.push(address(0xf6da21E95D74767009acCB145b96897aC3630BaD));

        _isSniper[address(0x0000000000007673393729D5618DC555FD13f9aA)] = true;
        _confirmedSnipers.push(address(0x0000000000007673393729D5618DC555FD13f9aA));

        _isSniper[address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)] = true;
        _confirmedSnipers.push(address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1));

        _isSniper[address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)] = true;
        _confirmedSnipers.push(address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6));

        _isSniper[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true;
        _confirmedSnipers.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd));

        _isSniper[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true;
        _confirmedSnipers.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514));

        _isSniper[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true;
        _confirmedSnipers.push(address(0x72b30cDc1583224381132D379A052A6B10725415));

        _isSniper[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true;
        _confirmedSnipers.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE));

        _isSniper[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true;
        _confirmedSnipers.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true;
        _confirmedSnipers.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9));

        _isSniper[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true;
        _confirmedSnipers.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7));

        _isSniper[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true;
        _confirmedSnipers.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF));

        _isSniper[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true;
        _confirmedSnipers.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290));

        _isSniper[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true;
        _confirmedSnipers.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)] = true;
        _confirmedSnipers.push(address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7));

        _isSniper[address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02)] = true;
        _confirmedSnipers.push(address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02));

        _isSniper[address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850)] = true;
        _confirmedSnipers.push(address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850));

        _isSniper[address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37)] = true;
        _confirmedSnipers.push(address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37));

        _isSniper[address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40)] = true;
        _confirmedSnipers.push(address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40));

        _isSniper[address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A)] = true;
        _confirmedSnipers.push(address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A));

        _isSniper[address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65)] = true;
        _confirmedSnipers.push(address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65));

        _isSniper[address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3)] = true;
        _confirmedSnipers.push(address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3));

        _isSniper[address(0xD334C5392eD4863C81576422B968C6FB90EE9f79)] = true;
        _confirmedSnipers.push(address(0xD334C5392eD4863C81576422B968C6FB90EE9f79));

        _isSniper[address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7)] = true;
        _confirmedSnipers.push(address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _taxFee = 0;
        _teamDev = 9;
        _teamDevAddress = payable(0xb7de10bf2700Cd28Cdf4fa74BBE9BDfa516ae560);
    }

    function liftOpeningTXLimits() external onlyOwner() {
        _maxTxAmount = 100000000000000000000000;
    }

    function openTrading() external onlyOwner() {
        swapEnabled = true;
        tradingOpen = true;
        launchTime = block.timestamp;
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(account != _router, 'We can not exclude our router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _teamDev == 0) return;

        _previousTaxFee = _taxFee;
        _previousTeamDev = _teamDev;

        _taxFee = 0;
        _teamDev = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamDev = _previousTeamDev;
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function RemoveSniper(address account) external onlyOwner() {
        require(account != _router, 'We can not blacklist our router.');
        require(account != uniswapV2Pair, 'We can not blacklist our pair.');
        require(account != owner(), 'We can not blacklist the contract owner.');
        require(account != address(this), 'We can not blacklist the contract. Srsly?');
        require(!_isSniper[account], "Account is already blacklisted");
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
    }

    function amnestySniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isSniper[recipient], "You have no power here!");
        require(!_isSniper[msg.sender], "You have no power here!");
        require(!_isSniper[sender], "You have no power here!");

        if(sender != owner() && recipient != owner()) {

            if (!tradingOpen) {
                if (!(sender == address(this) || recipient == address(this)
                || sender == address(owner()) || recipient == address(owner()))) {
                    require(tradingOpen, "Trading is not enabled");
                }
            }
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular charity event.
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForTeamDev;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // We need to swap the current tokens to ETH and send to the ext wallet
            swapTokensForEth(contractTokenBalance);

            uint256 contractETHBalance = address(this).balance;
            if(contractETHBalance > 0) {
                sendETHToTeamDev(address(this).balance);
            }
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and fee

        _tokenTransfer(sender,recipient,amount,takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToTeamDev(uint256 amount) private {
        _teamDevAddress.transfer(amount.div(2));
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToTeamDev(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeCharity(tCharity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeCharity(uint256 tCharity) private {
        uint256 currentRate =  _getRate();
        uint256 rCharity = tCharity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rCharity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tCharity);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tCharity) = _getTValues(tAmount, _taxFee, _teamDev);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tCharity);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 charityFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tCharity = tAmount.mul(charityFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tCharity);
        return (tTransferAmount, tFee, tCharity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function setExtWallet(address payable teamDevAddress) external onlyOwner() {
        _teamDevAddress = teamDevAddress;
    }
}