Hello everybody! In this video, I'm going to tell you how to flash a Wi-Fi router, why people do it, and when a router should be flashed. We will also find out where and how to download the latest firmware for a particular router model, how to flash standard and third-party firmware, and how to recover a bricked router. If you need to recover deleted data, view or restore removed browsing history. Hetman software products will help you. Follow the link in the description. Download the necessary program for free. Follow it and analyze the disk. The utility will show you the data you can recover, so you will be able to view it or get it back. In our channel and blog, you will find solutions to any problem, from installing an operating system or configuring it, to fixing possible bugs and errors or optimizing mobile gadgets. Our specialists will answer any questions you ask in your comments, under the videos or articles. Every day the internet is becoming a more and more indispensable part of our lives. That is why high-quality and fast internet connection becomes a key to success. It is common knowledge that when connecting to the internet, you might face all kinds of issues that seem to disagree with the paramount goal of having a fast and reliable connection. One of such issues can be related to errors in the router's firmware. When faced with such problem, most users tend to contact a service center. However, you can just as well flash the router without leaving your place. I will show you how to do it with the example of a tippling router. However, as most routers have similar functionality, this tutorial will help you in dealing with other models regardless of the actual manufacturer. The only thing that may really differ is the interface of the settings menu. When you buy a router from a shop, don't be too confident about its having the latest software on board. You may not know when exactly it was produced and how much time it spent lying on the shelf. Routers supplied with all the versions of their built-in software usually have security vulnerabilities. What is router firmware? Firmware is a piece of microcode stored in the nonvolatile or permanent memory of a computer, tablet PC, smartphone, GPS navigation system or any other digital device. In other words, it is a kind of an operating system which is made up of a huge number of small applications. This microcode, firmware, is stored in the permanent memory of a device, and the process of its upgrading is known as reflashing. Why flash a router? You should flash a router only when it is really necessary. As most experts say, if it ain't broke, don't fix it. There is no need to repair what works properly. Yet, it is recommended to upgrade the router firmware when you notice failures or freezes, when Wi-Fi turns on and off completely on its own, or when Internet connection gets lost all the time. Besides, it makes sense to upgrade the microcode if newer versions feature certain technical changes which you need for fine-tuning your router, or if they introduce support for some new standards. If there is a new version of the firmware fixing an important security issue, for example in the Wi-Fi protocol, or your router has its interface in English or other language only, and you would like to change the interface language, you may also need new firmware to unlock your router or unbind it from a certain service provider. Often, people install alternative firmware which comes supplemented with new drivers and applications, such as IPTV, VoIP, Proxy, Torrent Clients, Webcams, Modem Support, etc. But, as long as your router works without any serious issues and new firmware versions don't contain any considerable changes, there is little sense in upgrading it. By the way, if you notice that your router provides a weak Wi-Fi signal in a wireless network, it doesn't mean that it needs reflashing. The router may be positioned in the wrong way, or other factors may affect the level of signal. What you should know before flashing and looking for a compatible firmware version. First of all, it should be understood that possible mistakes when upgrading your device may deprive you of your warranty and make the device inoperable, without any hope to repair it. To begin with, you should know the device model and its hardware version. The easiest way to learn them is to have a look at the sticker on the bottom side of the device. You can see the module, address, hardware version and other information. For example, my router's hardware version is 9.1. When you know the model and hardware version, it's time to look for compatible firmware. To do it, go to the official website of the router manufacturer. Look for a tab with the name Support and give the router model in the search field. Then click the Support link and select the hardware version. Then click on the tab Firmware below. Look for the latest firmware version with the language you prefer and click Download. After that, extract the file to any convenient directory. That's all. The only thing left to do is to install it onto the router. Flash in the router Before you start flashing the router, disconnect it from the provider and the network so that there is no interference. Then connect the router to the computer with a network cable which usually comes supplied with the device. It is not recommended to flash a router by Wi-Fi. The network cable should be plugged into the LAN port of the router. Now, you should enter the web interface of the device. To do it, use your computer to open any browser and type in the router's IP address which you've just found on the sticker. Usually it's like 192.168.11 or 192.168.01 and so on. In the window that opens, enter the login and the password to access the settings. By default, these are admin and admin, and you can see it on the same sticker. After you open the router settings, it's time to create a restore point. Go to the tab System Tools and look for backup and restore. Click on the Backup button and specify the path where you want to save the file containing the settings. Here is an important piece of advice. No matter what you are trying to do with the router software, it is recommended to create a restore point for the settings. It should be done to have a chance of recovering the current settings in case anything goes wrong.  Finally, the flashing process itself. Go to the tab System Tools and look for firmware upgrade. Click on it to select the firmware file you have downloaded. Then click Upgrade. You will have to wait until the process is over. Here is one more important thing. While the router is being flashed, you shouldn't do anything with it. If you do, you can trigger a failure when the old firmware is removed and the new version is not installed yet. If it happens, there are very little chances to recover the device at home. When the flashing operation is complete, the router will reboot and wait for setup operations, but now with the new firmware. Restoring router settings. When the router has been upgraded successfully, you can restore the settings it had before. And this is when the file you have created before the flashing operation comes in handy. Go to the tab System Tools, Backup and Restore. Click on Choose File. Give the path to the previously created file and click Restore. That's all. The flashing procedure is over, and you can see that it's quite simple and quick. However, it requires all your attention, because a single step taken wrong can break down the device. If flashing was performed properly, the device should work quickly and reliably without any failures, and provided the quality of signal as guaranteed by the manufacturer. You can also install third-party firmware for your router, for example DDWRT. DDWRT is a free alternative firmware for wireless routers. It includes special functions which are not available in original firmware versions. These include Kai Network, Demon-based services, IPv6, a wireless distribution system, radius, supercharge options and hardware modification support for SD cards. The official website of my routers manufacturer says that official firmware can be replaced with third-party stuff, for example with DDWRT. However, the company will not undertake to provide service or technical support for a device with third-party software and cannot guarantee its reliability. The damage done to the device as a result of using third-party applications will cancel your warranty. Why would you need third-party router firmware? If you feel you can't get enough from the functions offered by the standard web interface of your router, you can install third-party software. Yet, if you don't know why this kind of firmware is necessary, it is a clear sign you don't actually need it. DDWRT firmware is a Linux-based operating system. Even with default settings, it has a very wide functionality that cannot be compared to the factory-supplied firmware. It features such components as an FTP server, SAMBA, WOL and many other things. With a web interface, you can access detailed statistics and see the traffic load for the local network, wireless network and the primary internet connection, as well as the load on the router's processor and memory. If you can figure the router for installation of additional packages, you can turn your router into a home media server. Connect a hard disk with the turn client installed on it and enable HTTP-based IPTV broadcasts that you can watch by Wi-Fi. If you have a television supporting DLNA standard, you can connect it to the router and watch IPTV as well as watch films from the hard disk. Flash and third-party firmware follows the same steps as in the case with the standard software for your router. Start with downloading the firmware. To do it, visit the official website and click on Download. Type your router module in the search field and download the firmware that corresponds to the hardware version of your device. You will see three files. The first and the last file are what you need to flash your router. The second file will be required to roll the router back to the standard firmware. After the download is over, open a browser, enter the web interface of the router, go to the tab System Tools, Firmware Upgrade. Select the first downloaded file and click Upgrade. Wait for the process to finish and enter the web interface again. The address for accessing the router may change into 192.168.11. Enter the login and the password Admin and Admin. Then switch to the tab Administration, Firmware Upgrade. Again click Choose File and specify the path to the second file. Wait until the flashing process is complete. The job is done. The third-party firmware is now installed. As you can see, this firmware offers a wider range of functions. This kind of software can even boost Wi-Fi signal to the maximum level that your router can support. If you want to do it, go to the tab Wireless and check the box Advanced Settings. In the line TX Power, you can see the output rating of 20 dBm. For the standard firmware, this value is maximum, but with the new software, you can set it even higher. This way you can improve Wi-Fi signal for some routers. To change the interface language, just go to the tab Administration, Management, scroll down and choose the required option in the line language. By contrast with the standard firmware, you don't have to look for software with particular language options. And finally, recovering a router after a bad flash. The easiest way is to reset the device to factory settings. However, in most cases, it's not going to help you if you try to install incompatible software. If this is the case, you will have to use an alternative method. It doesn't work for every model and success is not guaranteed, so use it on your own responsibility. To use this particular method, you will need the factory supplied firmware, with your hardware version and localization, and an application called TFTPD. This is a free utility and you will find the download link in the description below this video. Extract the archive and rename the file, at first specifying the hardware version and module of your device. You can see an example on the screen. Version, module, recovery bin. It is also important to specify the hardware version. When you do it, place the renamed file into the folder containing the TFTPD application. After all these steps, you should change only one root of value, refresh its IP address. For a Windows 10 computer, open Settings, Network and Internet, Network and Sharing Center. Click on your network, select Properties and open IPv4. Type in the following IP address 192.168.166. And for some models, it can be different – 192.168.066. If both addresses failed, try using 192.168.086. Set the mask as <IP_ADDRESS> and return to working with the TFTPD application and the firmware file. Make sure that the router is connected to a computer or laptop with an Ethernet cable within a local network. Run the TFTPD application with administrator rights. In the window that opens, you will see a field entitled Server interface, where you should select the IP you have given in the network settings before. When you select it, click on the button Show DI error. There must be the renamed firmware file that you have placed into the same folder with the TFTPD application. If you do everything right, it is time to power up your router, then press and hold the button WPS Reset. At this stage, the upgrading process is displayed on the screen. If it isn't happening, turn off the router, hold the WPS Reset button and turn the router on again. You are almost done. Just wait until the upgrade process is complete and the router reboots automatically. When the process is over, you should be able to access the device settings again. If everything works fine, don't forget to open the local network settings and change the option Use the following IP address back to Obtain an IP address automatically. And that's all for now. I hope you find this video useful. Hit the Like button and subscribe to our channel. Leave comments to ask questions. Thank you for watching. Good luck.


Welcome to my talk implementing binary protocols with elixir I hope you're curious about this. I got curious about binary protocols like Year and a half ago, but we'll talk about this in a second I'm pretty stoked to be here as you might guess coming over from Germany is quite a trip It's not my first time here though. I've been here 26 years ago. You can judge by my awesome like clothes But anyway to in order to to start the talk and to make it a real story We have to take a little detour and then we'll like It might take the first 10 minutes of the talk and then we are coming to the you know to the beef But let me talk about the web first. I myself. I'm a web developer since I started developing software and What I felt is that the web is screwed right? since the beginning it You felt this even more and more so I think it's because it's completely outgrown. It's intent, right? So Tim, honestly, imagine the web like 25 years ago with the idea that research institutes can share their results In a document way. His idea was even that the web browser is kind of an editor all the stuff did not happen Now we have Tinder He might not have a thing of that it's slow right because of multiple reasons and If you take a look at a average website two years ago, it had 101 assets which all over had 2.6 megabytes shared over 38 connections and especially the connections Made this website slow because you have it's dcp The other way around to HTTP is running over TCP and TCP you have this Handshake process which is ping back and forth at least three times and if you're using an encrypted connections even more the inventors and the people in charge of the protocol namely the IFT knew about this a long ago like almost 10 years now and Like three years ago. They started working on fixing it So they invented or they came up with the idea of the next version of the HIV protocol namely HTTP 2 So first of all, let me tell you a little bit about HIV 2 It's compatible So it's completely not breaking the web the scheme will stay so we never the user will never see an HIV 2 somewhere in the Urella some something all the semantics we have headers methods and the request response cycle that will stay and Here's the thing how they fix the connection problem. They multiplex single TCP connections So you can transfer multiple resources over the same given TCP connection you can think about this Like that so we have one physical TCP connection and then on this connection. They are logical streams and On this connection there are frames so each frame belongs to a logical stream technically, it's only frames being sent over and Now I want to talk about this frames and these frames are binary. So here you see the connection Where where we're going now? So this frames in the h2 protocol are binary frames and They're binary for a good reason because they want to save save some space on the connection They want to make it fast. So the idea of the hv2 protocol was to be really fast and Here we have an example of the of a typical frame layout so every binary protocol usually follows frame layout Here you see the one from hv2 it starts with a length Every frame layout or every binary data usually have the length in there because you should know where it should stop parsing Especially if it's a protocol like an effort protocol It might be not the same for Files on the disk They have a type We have flags in here The type defines the set of flags then there's the so-called reserve bit. It's always zero. So you should not bother with that It's Just zero and the stream identifier. This is what I just talked about that the frames belong to a logical to logical thing Also frame layouts are always in this 8-bit chunks. So in the binary chunks and This is just the header So there's also the body following the 10 different frame types and I want to take a look at one specific one Which is the header. So you all probably know HTTP headers, right? It's meta data information per request and it has the type 1 because it usually initiates a request and This is the frame layout of the header frame. You only see the body here. So there's also on top of that There's the header frame format or layout you saw in the previous slides Again, it has a pad length so this specifies the length of the padding so that every parser could know What is the header block fragment once the padding the padding is a security mechanism. It's Against attacks called breach and crime. I'm not that much into security stuff So this is all I really want to tell you about that so if you if you're curious about that just Google breach and crime and Then there's also the exclusive bit a string dependency away That's not our main focus here. You could fill up a complete other talk about that and then there's header block fragment and here we are going Even even closer to binary protocols because not only the hve protocol is binary the h pack Or the header block fragment is also a binary protocol. So if we fill up this was like real fake data, I'd say This is This is a frame and this is should be valid at least judging from the implementation. I have And I want to talk about this block here so this is the so-called header block fragment and All headers transferred on the protocol are encoded like that now I Want a little bit talk about my motivation on this talk So I fumbled around with the hve do protocol for quite some time I found it pretty interesting. It solves a lot of problems. We have nowadays It solves kind of the it kind of the same it kind of solves the same problems all the weird asset pipelines Are trying to solve but on the right layer and I got interested in that so I was tinkering around the protocols and I stumbled upon upon the HPEC RFC so the HPEC RFC is The RC where the whole header Block fragment parsing is described and it is it is decoupled from the RFC where hve2 is described for the same reason You would decouple in software right so you can update independently and It could be used in other places So if you have a f the use case of having headers and you want to compress them and you're not running on the HP protocol You could also reference to that, but there a few There a few points they really point to the direction that it's used in HP and at the moment It is the only use case But it's not really tight closely tied to that Right, and also I might or might not write my own web server and elixir But it's definitely not something we are here to talk about Well, how does HPEC work? HPEC works with so-called header compression header compression table So this is to give you some context about the elixir code. We will see in a minute so again, the HPEC protocol works with a header compression table and This is the header compression table. It consists of two parts. There's a static part and dynamic part But it is one table. So the index continues to run, right? And if I have a given header like the method get here the encoded version will look like this So you could encode the header method get just by an index in the header and the header compression table same for the methods for the scheme and the host is also encoded differently here and then there's the pass for example, and if there's a Value which is not in the static or dynamic table. You just encode the string with Huffman encoding I won't talk about Huffman encoding in this talk But it's I think it's an interesting encoding and if you want to know more about this Just check it out. It's not I mean you could learn it in like half a day or a few hours That's an awesome YouTube video explaining it. I have linked at the end of my slides I will upload them later. So I really recommend checking them out and It is encoded like that because you can think that the method get is something you would see on on the whole internet Quite a lot, right? This is probably the most sent header on the most sent thing ever right because it's retrieving information from any web page and This is why you can have the key and the value in the header compression table And then there might be headers where the header is like always in a request like path, right? There's always a path and request, but you can't have or mostly the value differs And this is why you have it De-coupled here and you can have entries in the header compression table where only the key is specified and the value Could be dynamic as I mentioned it's a binary protocol as well So it also has this binary format and I want to look at this now So this is an x header think of method gap And I really want to I really want you to pay attention to the first bits in the first line When we are taking a look at all the different formats now because they all follow the same scheme So if you're receiving an index header the first bit would set to one and then there's the index the headers actually referring to Then they are literally header fields with incremental indexing that means that the headers are added to the dynamic table And these starts with a zero in the first bit a one in the In the second bit so with the index one and then there's the index if it's an index name or a zero If it's not an index name same for literally header fields without index But again the first bits differ, right? So the first bits are four zeros and then the index or everything zero if it's a new name and then there's also never indexed Which is for intermediaries on the protocol Then it's three zeros one then the index or zero. So you see every possible format every possible Direction on how to handle a header has a difference Different signature right and this is how you can determine which header block fragment or which header you're actually seeing And this is what we're going to do now I really want to guide you through this library. I wrote on how to parse the HPEG protocol So now that we have the context set Let's take a look at decoding the the header block fragment before we do that. There's one Basic with this which is super crucial and I really want to take this short digression It's binary send strings and basically binaries are strings better a String in elixir is a utf-8 encoded binary I was just checking the schedule of this conference this morning. I saw that there's an entire talk about this So if you want to know more check out that talk We just do this really quick here, but I think with that statement There's enough Content covered to make my point in the next slide. So if we switch over to the console and just firing up IX You could see with the helper method question mark each code point of every character you have So if I do a question mark II I can see that he has the code point one on one You can also do it the other way around you can specify a string by writing a binary so this is a binary construct and If I just write 108 and add the utf-8 modifier and what if I say you usually more for pattern matching You will see I get the string out. So elixir always an IX always displays you a string Even though it is a binary when every binary or every code point in this binary has a representation in the in the table You can also just leave out the modifier as you see here. So it's done now Because the code point is something this playable And if we clear up this terminal now just fill up string Jose And that's another trick if you want to see each code point of the of a string just append a non-displayable character The zero for example, and then you would see each code point in here And this obviously also works for emojis and whatever Well switch back. Now. Let's take a look at the actual HPEG module so all the code you're Okay, I better stand here So all the code you're going to see now is inside this HPEG module. There's also two supporting modules We're not taking a look at this is the table implementation and the Huffman implementation But we'll see this in a second. So The HPEG module defines its own type because we are dealing with headers a lot So we're defining our header type and the header is just a tuple of two strings It's key and value. So method get would be two strings methods and get There's the public function decode. So we aren't going to take a look on how decoding works, right? It's a parody of two. This is important later on and Its signature is that you receive the header block fragment, which is a string or binary Which is the same and the pit of the table. So the table is a gen server Implemented it's just a dense server. I'm holding up the state of the dynamic and the static table And again, I don't have the implementation of that but all the code is on GitHub So if you want to see how the table and the Huffman stuff works, just check it out Well, now, let's come to the interesting part. How does the code work? Well, it's parsed Well, no, so we're going to see how parsed works Due to the fact that a header block fragment can hold multiple headers And we're going to call parsed recursively and this is why we are calling parsed with a empty list Because we are going to add the headers. We're just parsing to the list Let's get back to this image As I said, this is a valid header block fragment and I want to pass this header block fragment together with you in the following slides So pay attention to the first few bytes, right? So it's one a bunch of zeros and then a One zero, which should be a two, right? And then there's some other stuff. So if you're calling the path method With the header block fragment and I have multiple Implementations of the path method. This is one which is going to match And if you take away something from this talk and if you came here to know how binary protocol parsing works This is really what I want you to take away because this is basically all it takes And we're using a few elixir patterns here and the first one is you can deconstruct binaries in function headers and then use function header pattern matching All right So I just paste the complete binary as a first argument and then I'm deconstructing the binary and pattern match Against the pattern I know from the protocol and this is why you have the code coming above, right? This is how how the library came to life because it just pasted the The formats into my library and then we're writing function headers and the implementation is not I mean you'll see this in the second But it's not that complex Take take care that the rest variable we have here already is without the first one because we pattern matched out the one right and Then there's empty list and the pit So next thing we have to do is we are parsing out the integer So the index which is an in seven the multiple representation of integers we'll see in a second For now, let's just let's just take this as given that parse in seven gives you with the index And then you just do a look up in the table to see what is the actual header and as I mentioned it's a two and regarding to the Had a had a block table on the h pack table the index to refers to method gap So we know the first header what we do is then we pass again the rest and Then append the header to the list or prepend the header to the list and then calling parse again So I'm next It's the same. It's again the same Header the same function which is matching. So we're going over this a bit faster here Right, you see the header. We just passed out is in the variable now this time. It's index six and Six is scheme HTTP and then we are calling parts again Again, that's the same thing matching. So it's again the index header field You see the headers have now both headers in the list in the like your inverse order So this time is the index four. So you see that could be path Variations which are in the table like slash here. So if you look up the header You've got this one again a pendant and then we're calling parts again And now something different is going to happen because it's not an index header field So what we have now is literally header field with incremental indexing. So this means there's only the index known But the value is a string and again, we're doing the deconstructing panel matching here the rest is Also, but that's there's one thing you might wonder Which is the modifier, which is just an integer. It's the shorthand It's basically syntax trigger for having the size modifier So when you see zero colon colon one, it is basically zero colon colon size one So that's yeah, that's basically it and you can even combine modifiers with adding a dash or minus So what do we do now this time the index the integer is encoded and in six bits or in six plus bits I'm passing that one out. Then we're passing the string and what we're doing We're passing the complete block so the two lines at the bottom We are passing that to the past string method because strings are always encoded like that So the format of strings is always that format and then we are Then we're taking we're looking up the header from the table because we only have an index So we have to know the actual header string, right? So we have to know the key. That's authority and Due to the fact that it's incremental indexing we have to add the header to the list because next time Someone wants to send us the header. It could actually reference just to the index, right and The index and what is in the table and what's not at the table is actually not something which is transferred between client and server So if I'm the client you're the server. I'm sending you something and I say you save it I know you will get ID 52 because the static table if it's the first thing I'm sending you Because I know that the static table is just until 51 and the next thing I send you and say save. I know it's 52 So I know what you have in your table This is how this works Well, and then again, we are calling parse adding pre-pending the header. We just parsed and then calling it Now something again different is happening This is how we terminate Recursive function calls, right? So now the header block fragment is empty. We've passed everything So we have to kind of wrap up So we just reverse the headless because had us have to stay in the order that's mentioned in the RC So just reversing it and then that's it. We have part the headers. This is how had a block fragments gets parsed Never played around with that. You mean a speed differences Yeah, I mean you won't send that much headers, right? I think the header list is if it's if it's a hundred headers, it's immense and 100 is maybe not that big of difference Okay, um, let's wrap up how header parsing works and how this had a block fragment. We have just parsed How it looked like so the first bite was the method get header the next one Was EAM HTTP the next bite was path Slash and the next bite was just the key authority and then all the rest Was the string WWW example.com? So if you want to use your headers efficiently, this is another takeaway from this talk Hopefully always use index headers as much as you could and if you can't do that always add them to the table But usually this should only be an interest if you're writing a website or something because on the otherwise The clients and stuff should handle that for you, right? But maybe I don't know don't have headers which change all the time when it's not necessary That could be a takeaway for you know usual web consumers Okay, then there's two things left while decoding which is parse string and parse integer, right? So let's take a look at how string parsing works because I want to save the most complicated one for the for the letter string parsing is This so you have This format and as I mentioned it's always the same and the first bit indicates whether the string is often encoded or not So it's one or zero and then there's the actual length and then there's a string So how does this work here? We have the rest first thing we do is we pile out the length and this user This is using the same integer The same integer encoding we will see that in a second and then we do a pattern match again And you don't have to have this pattern matching as a function header You can just do this pattern matching as you would do pattern match like in all your other lixar code So we are pattern matching out the actual string value and the rest because you know you never know how much there's left and While we are this slide. I want to talk very briefly about the binary and the bit string Modifiers so the binary modifier basically says it how it always have to be a complete byte right, so it's always a Multiplier of eight the size always have to be multiplayer of eight. Otherwise, it's it's a match error Right and bit string is basically it don't have to be a complete byte. So it could be just you know Seven bits that that is okay for bit string, but that's not okay for binary That's the difference of that Okay, and then we have passed out basically everything and then we're returning we we are returning The string value and the rest. Oh, yeah, and this is how Huffman encoding looks. So it's basically the same code It's basically completely the same code unless The function header is different. So again, I've defined past string two times first time the function header says zero second time function header says one in the first bit and then Before we return the string value. We actually call Huffman decode again If you're interested in how and how in how Huffman decoding works And you can check out the library on GitHub if you know how many coding and are wondering about the Table the decoding table the decoding table is specified in the protocol. This is something you don't have to transfer It's it's given. Yeah, so if you check out the library, you will see like I think it's a 200 Yeah, it's a 250 250 lines of you know, just table definition All right, now let's come to the I think most complicated part and how integers are encoded So let's recall this is how the format looks like For the index header field and for the index header field the index or the size you have to transfer the index of seven bits And seven bits is is quite it's quite good. So you can encode Quite big numbers in there. So for this example it might work But in the protocol you can also find integers encoded in four bits And this could be not enough if you want to say here's my string WWW my super long URL comm this might not be enough to encode this in four bits, right? So this is why it is seven plus or four plus because it basically says The integer you're going to pass now is seven or seven plus unlimited however much space it needed so it's basically unlimited integer size and I wanted to talk about how this works now Here is little CS one-on-one how you how you know which decimal is encoded in a binary Well, you assign the values one two four eight sixteen thirty two forty six and so on to the values and only set the ones With a bit of set starting on the right side and then you just do a sum and you know this binary would be 42 Right, but we have computers. They do this stuff pretty well Just to gather a little recap here So 42 is a quite a small number so encoding this Just works and this is how it would work in the given header block fragment, right? You would just encode the number at seven and that's fair But what if we have a bigger number? Well the bigger number Follows the following pattern First thing you do if the number does not fit into the string or into the space you have given In our example, it's five so think of in five plus Right, you set all bits to one and this indicates the par the that the integer is bigger than the given prefix So here in our example, it's a prefix of 31 and then we have a rest of 1306 so 103 1306 is still bigger 128 where 128 is what we could encode in this Complete a bite or in this complete bite, right? So we have to encode this by doing a modulo or dividing it. So we dividing hundred 1206 by 128 and What's Sorry, what is important important for the parser is that you always Set the most important the most significant bit Which is the bit on the very left in our example has to be set to one So the parser knows the next line is also important for the integer because when the next line is zero It knows the binary ends here So what we're doing now? We have the rest which is a 10 and Then we're encoding the 10 the 10 easily fits into 128 and then we encode the 10 and this is done I think this is very complex. It took me a long to a long time to wrap my head around this I really want to give a huge shout out to the cowboy implementation of this stuff Because the elixir implementation I have is pretty much inspired or maybe copied by that So how does this work? Well, this is I'm parsing for as I mentioned and Here's a pattern match when we are decoding And all the first bits in this rest we got past is one We know that we have to call parts big and with the rest and then we also give The prefix size because we have parts in four parts and six parts and seven and Then we have kind of the fetch all so the first one doesn't match That's one will match and we know it is Smaller than the one we just mentioned so we can just return it right pass it out and then return it and Then we have parts big and and what parts big and does it basically has The first the match where it's zero at the most significant bit So we know that we can stop pausing here So what we do is we parse out the rest And then we have the value and then we do some bit shifting magic here And then that's sad and the same as if the most the most significant bit is a one We know we have to call parts big and again now. Let's talk about encoding and To make my job here easy. I could say encoding is just decoding but reverse It basically is but I want to I want to walk us through this with a little bit more examples here So we have public the public function and code it get past a list So that's where you see the guard function here because we want to make sure it's always a list of headers and never just one header and Then we would just do the encoding and call encoding with a parody of three Because it's again recursive call and we have the header block fragment here And they had a fragment for the starting call is obviously an empty binary and Then I see to see we have the private function encode To encode the headers and this Does a case on the table because we could have three different states And the first one is that the key and the value are known to the table like method get Right, so that's the key and the value are in the table So we know we could just encode the index header It could be a key match so that the key is in there like an authority example, right? So the authority is in there, but the value should be encoded and literally and then there's a Non-match by the case so the value is not the table at all the edge pack library I wrote only have this three cases implemented so there's not the never-indexed stuff That's not going to happen and then not added to the table. It's also not here So we call either one of the methods depending on how we Want to encode the header and then we have the partial header and then we just append this to the header block fragment and We have everything encoded well now. Let's take a look and how this encoding works because this is where the magic happens, right? and this is encoded next and I think I don't know I think this is pretty straightforward, right? So it just said again regarding to the format the first bit to one and then you encode the then you encode the integer in in 7 So up next there's a little header field with incremental indexing So first thing we do if we look up What kind of header we have because we want the we want the header to be added, right? So we added to the table and then we just encode the header. So we said the With that's a scheme basically so the first bit is zero seconds one Then we have the index and then we do encode string as a binary And now also let's take a look at how this primitives are encoded So let's start with rings does encode string and in the HPEG library again There's only the case where strings are half been encoded so There's never the case in this library at least where a string is not half been encoded because I think it's okay to always do it I mean there could be the downside of like speed because it Uses a few more CPU cycles than the other one. I don't know if that's important But regarding to size this either it's equal if the string is kind of short The size would be equal and if the string is longer and has more repeating characters the string will be shorter So I think it's it's good to always do that at least for the start and then how integers are encoded Well, that's the same kind of Bit shifting magic. So let's take a look at encode in six if it's if the end is Smaller we plainly encode it, right? It's not if it's not we encode the big end and Again said the you pass the prefix or set the prefix in the binary here, right? And then there's encode big end and if it's like smaller than 128 which is whatever could fit in the one bit And we just encoding it setting the most insignificant bit to zero or we call and code big end again Awesome. If you've read the abstract and the talk description I also promised to talk a little bit about RFC based tests and I think our C base test sounds like you could fill up a complete talk It's not But yeah, let's take a look. So This is the test I have or the test setup It obviously uses X unit and For set up. We just set up a table. So here you see the first time a little bit of table code at least how it's initialized and Here is a screenshot of the actual RC. So this is the IFT spec and I want to zoom in a little bit and They have really sophisticated examples of how the protocol is functioning. So they have Always the encoded header list that the non encoded headless like the paint header list Then they have a hex them of the encoded data and then they have Example of how the decoding process works and then How the dynamic table look afterwards and they don't have this for one head of the fragment They even have this for subsequent requests So they have the first request looks like this and then we make this request and then the table looks like this and Coding looks like this. So I think this is really this is really awesome And if you just if you're implementing this library Like I did I was just copying over the test because if I have the tests they have the specs passing I can be super sure that my implementation is correct, right because they have such good tests and Here you see one of this RC tests. I really shortened lots of stuff here But this is basically how it works. So this is the test for the little header fields and with the next thing First thing I did is setting up the header block fragment mentioned in the test But as you can see it looks a little bit different than the one in the actual spec, right? Because they have this hex them and it looked yeah look different So what I did it was just pasting it in and then I was going with a lot of multi-line edit and search and replay stuff splitting up the four Digits blocks to two digit blocks then pre-panning a 0x and then copy out the comment Okay, so this is what the test does so it actually passes the header block fragment in the table To the HPEC decode function and then it asserts if the header I just receive actually is this what is specified in the test and I also check the table size because this is also something the specs provide the specs also provide the expected table size but if you think on the or if you remember how the How this back looked like I think it would be awesome if my test could just look like that, right? So what I really would want to have and there is a there's a change that in the actual code and you can see where this happened I want to have That one just in the code, right? So I wanted to have This representation of the hex dump in my test And not like transforming it manually all the time, but if you look at this code It's not valid elixir code, right? It's not it's not going to work. So What you could do with this at this point? We can just come up with our custom signal here to make this work And this is a test helper and as you can see the lines in there are kind of long I want to walk really quick through this Basically what we do here is we split line by line Then we remove the commons and then we split by space into two bite chunks Then we flatten and filled out the junk and then we convert the hacks into actual integers. I am Sure that this is not the optimal solution. I am sure that this works So if you have improvements to that again, it's on get up So just feel free to jump on that and improve that if we jump now to the terminal execute the RC tasks You see even though it's a lot of helper tests I had a lot of helper code elixir is as awesome that this works really fast And it doesn't slow down the test at all Again, the code is all open source and get up So if you're interested in that if you want to poke around this if you I don't know want to work with this a little bit If you want to improve it just jump on that Send some pull requests. I mean, there's not it's not the biggest open source library in the world, right? It's really this Basically, there's nothing going on to be honest There's one pull request There's one guy and I really appreciate that because he's writing an HB client and he found a bug And I don't know if he found a bug in engine X or if he found a bug in my code And we actually in the moment of figuring this out. So if you want to read really long pull requests text if you also invite it This is the thing. I might or might not write if you're interested in how Web server code could look like I'm also I want to invite you to come to me and talk They're really want to give you some final thought about all the stuff. I did another stuff I was doing I think elixir is and also all in as well So this is kind of like elixir and all and could be replaced one by one here in this case in this example And as you see as we have cowboy right cowboy is awesome and how I have a lot of this stuff You can also do this stuff in cowboy But elixir is really great to do that and we got a lot of syntactical sugar over the stuff You could do that and I think pausing out this stuff is pretty awesome with the function with the pattern matching and the function header matching Even though time is running out. I really want to take this Five seconds of fireworks to my for my company Jim knew and because they basically enabled me being here So they basically enabled you listening to this stuff. I did here and Yeah, if you want to chat about how website builder works or I don't know How working in the most beautiful city in Germany is just drop by My name is only Michelle is if you got any feedback to my talk to the stuff I do I do not or I mentioned or I did not mention. Please just follow up on Twitter. This is thing I do the best I do the most I don't have business cards. I don't know why people still have this that tree in their pockets Putters from business cards. So if you want to do that just follow me There's follow-on get up. So if you into that, you can follow me and get out. No one does that I'll check out my own page my side project. I don't know This is really all I got and I want to thank you very much for listening to me You


This is Seth DeMore calling you. Hey, doing well, thanks for the quick response. Yeah, I know, it was, and listen, I'm right with you. I love the shoe, I love the ride, and the upper feels amazing. Honestly, I don't know, like I said in the video, it's my first pair of on shoes, but I'm kind of excited about them. I really am, like I don't know, there's something about it that, so I mean, yeah, once the snow melts a little bit here in Denver, and I'm excited to just take them out on the pavement and put miles into them, so. I'll keep you posted. All right, you have a good day. All right, bye. There you have it, ladies and gentlemen. There you have it, just got off the phone. You were correct, YouTube, you were correct. You told me to either return the shoes, the on shoes that tore, or to call them, email them, tweet at them, whatever it took to get their attention and let them know about the tear in the upper. Guess what? Guess what? They are gonna take care of me. This gentleman I just spoke with, a representative from on, they're gonna take care of me, and they were so sorry that it happened, and I told them, like, listen, I love the shoe, I love the ride, it feels good so far, but this little defect, maybe it was a defect, I don't know what happened, but bottom line on, thank you for taking care of me. That's amazing, and I cannot wait to get a new pair and put them through the paces for all of you, so don't worry, everyone, the on review is on, baby, it's on. Just arrived at the Boulder Running Company, and I just, I'm on my way to my run today, just thought I'd stop by, show them the tear on the on upper, just to see, get their opinions on it, and anyway, so let's go in, see what they think, see what they think. Keith, how you doing, sir? Good to see you, I like the hat. I'm gonna, I'm gonna let you, I'm gonna let you look at the tear, so I'll let you see if you can find it. Usually it's at a seam spot. Yeah, right under there, look under there. Oh man, doesn't, yes. Isn't that crazy? So first tie, and, but, good news, on is gonna take care of me. On, that their customer service, amazing, out of foam, oh my goodness. Are you kidding me, are you kidding me, is this another, is this same one? Same one. Same one, okay. Now do you think it was a, a lot of people were commenting like, who knows, maybe it could've been a defective pair. Yeah, okay, yeah, yeah, okay, yeah.  You're amazing. I've got another question for you. The speed cross five, it's coming, right? You don't have a date yet, okay. Taking, taking care of me, taking care of me. Oh, it zipped out. I'm out of here. You may have went up front. We're, we're out, oh, I thought I saw someone up there. Nope, we're out and we're in the warehouse, looking for the, looking for the, the boss man. This is, do you know this guy? I do not. This guy went to my high school. Matt Hemingway, the Univista High School. I see this. Yeah, he went, he's, he is, took silver medal at the 04 Olympics in the, in the high jump. So that is, I'd recognize him immediately. He's like our, our hometown hero. So Keith taking care of me again. Boom, appreciate it. All right, thank you.  Keith's favorite place, right?  Yeah, right. No, I will not be taking the Ons on the trail. All right, thank you, Keith. Appreciate it. Keith is the best. Kurt is the best here at the BRC in Littleton. Come check him out. And man, they got me a new pair just like that.  So holy guacamole, don't know what to do. Just grateful. Just gotta remain grateful folks for good running shoe companies that have great customer service and running shoe stores that have great customer service. It's the bottom line in, oh, past my car. Bottom line in the 21st century. All right, Deer Creek, I'm coming for you. All right, here we go, ladies and gentlemen, calling an audible, not gonna run at Deer Creek today. Basically, Deer Creek has a little more vertical and since it's my first week back, trying to chill out, not go too crazy. So we're calling an audible. We are at South Valley Park and I'm waiting for Steve and Maddie to show up.  Probably squeezing a couple of miles before they get here. But I think we'll go four or five miles, nothing too crazy. And again, a shout out to the Boulder Running Company for taking care of me with this on lineup here. Basically, this is the on cloud and I know this is not the go-go-to running shoe from on. Maybe a little more in the category of a cross trainer, but I'm actually, I enjoyed it a couple of days ago when I did run in it, even though the upper did tear on me. All right, today I am running in the Solomon Ultra, S-Lab Ultra, and I almost called it the Ultra Pro. The Solomon S-Lab Ultra, this is just a nice, not too aggressive trail shoe. You see the lugs there on the bottom. They're just not, they're not crazy deep, but they get the job done. It is a little muddy out here today. So you're gonna meet Steve and Maddie. All right, some fellow runners here in Colorado. All right, come on, come on. 64 degrees, 64 degrees. Oh my goodness, oh well. I should be wearing shorts right now. It's like Denver, Denver, Denver. What are we gonna do with you? Here we go. I'm stroving it right now. Uh-oh. Uh-oh.  Things are quick. I don't watch yet, except for this 1999 Women's Time X. Nice. Hey, that's the way to go sometimes. Well, that's technology's better. Sweet. All right, you know the drill. What's everyone running in? Steve? This is a Nike Structure 22s.  He loves the structure. Oh yeah. Maddie? All right, Rook's Pure Grip 5. Okay. Whatever was cheapest on running warehouses a year and a half ago. Love it. Still working through. All about pinching pennies. Okay. And I've got the Solomon S-Lab Old Trails High Pop. And I love them. They're a good trail shoe when it's not too aggressive out. So I am not in the on-shoes day, not today. The Europeans are really, they're not too happy with me right now because the live stream is starting too late. Yeah. And they still stay like, available. Yeah. It's available. Ginger runner must have that issue. Yeah. Roll with it. We'll figure it out. Time warp somehow. Just have to borrow this. Take this with me. Here we go. High fives. Boom. I love the glasses, by the way. Yeah. Steve? Oh there Roka. Nice. I, good ol' gooders. They're okay. Cheap. All right guys. Go green. Go green. Go home. All right. Peace. Everyone deserves a second chance. Alrighty, here we are. Standing in the on clouds right now I have them on my feet and they feel great. They feel great. And no tears this time around putting them on my feet inside. So that's a bonus. Ian, who knows? Maybe it was a defective pair. A couple of you mentioned that in the comments a couple of days ago that the last pair could have been just a bad, a bad batch, you know? And who knows? Who knows in the grand scheme of mass production. But I also heard a story today at the Boulder running company that I won't mention the shoe company. But basically, as he was walking from his car to the trailhead, by the time he got to the trailhead his toes were sticking out of the side of the shoe because of basically bad glue on the shoes. So yeah, bad, you know, there can be bad pairs of shoes out there. Something to be aware of. And my shoe of choice for today was the Solomon Ultra. This shoe, and this is not gonna be my full review. Just a few brief thoughts. I would wear this shoe in a half marathon to 50K trail race. I don't know if I would take it much beyond 50K. Like it has some okay cushion but not amazing. So some ladies and gentlemen that are professional ultra runners will wear this shoe for at the 100 mile distance. Eh, I don't know. I don't know if it has quite enough support and cushion for the 100 mile distance. But it performed well today in the mud and the trail was pretty buffed out today. So not a lot of rocks. And I would not wear this shoe on really technical trails. It's more for that buffed out trail feel and it has some okay lug action on the bottom. Not incredible. But I, you know, I wasn't slipping around at all today but if you're dealing with really muddy conditions this is not the shoe for those conditions. So anyway, just a few thoughts on the Solomon Ultra shoe. I love it. It's a great shoe. But not, I don't know if it's the best Solomon shoe out there. I'll just put it that way. And a quick update on the live streams. Thank you for chiming into yesterday's question of the day part one about what night of the week would be best for you for tuning in live to watch the live streams moving forward. And a lot of great thoughts and ideas are streaming in. It's kind of split 50-50 right now between Monday and Wednesday. And those two nights of the week work best for me. The weekends are tough just so you know and I know some of you have school, you know during the week and obviously you have work during the week but I also need a little bit of a weekend. And so like Friday and Saturday nights are not so good because people are usually out, you know maybe getting dinner or I don't know just doing stuff out and about especially in the summertime. So I don't think Friday, I don't think the weekends are gonna work well only because I also need like a little break on the weekends. Therefore Monday and Wednesday are definitely the top two answers right now. And I just thought of this Monday night football that could be something that interferes throughout the football which is for everybody that's outside the United States. It's a pretty big deal. People tune in and watch Monday night football. Also some of you commented about the ginger runner who does his live streaming on Monday nights and that could create some conflict, time conflicts if we did Monday night. Therefore I have decided after talking with your love Wednesday nights. It's going to be Wednesday nights moving forward at 7 p.m. mountain time. So instead of 6 p.m. mountain time we're gonna do 7 p.m. Again a lot of you voiced your opinion that 7 p.m. would work a little better which makes sense because 6 p.m. is dinner time for everybody here in Colorado. Now 7 p.m. means 9 p.m. on the East Coast so I know that's a little later but then it's 6 p.m. on the West Coast. Anyway, there's never gonna be a perfect time for example I apologize to everyone in Europe. Like listen, what are you gonna do? I can't by locate yet. I'm working on that, I'm working on that. So maybe at some point I will do different times for people in Europe, for people in Asia, for people literally around the world. You know maybe once every three months will change up the time but for now it's going to be Wednesday's 7 p.m. mountain time starting next week and as far as the format. Here we go, are you ready? So I love your tips and ideas that are streaming in, keep them coming. Basically I like the hour format sticking to an hour. I wanna respect everybody's time and so if I'm just getting you know of course and I don't have a producer just so you know like true love you know is negotiating with the children inside as I'm out here in the shed doing the live stream so she can only help so much and therefore I'm thinking the format initially will be, well we're gonna, okay let me, we're gonna do three sections over a 60 minute period. So 20 minute sections and the first section will be a specific topic. The second 20 minutes will be another topic and the last 20 minutes will be open Q&A.  The second 20 minutes on how to train for a 5K and the last 20 minutes will be open Q&A. Sound good? So it'll focus our discussion a little better over the course of the hour that we are together and over time we'll just get, we're gonna get better as we go through this because we're all learning and I believe we are going to fix the technical difficulty. Basically, yes, true love and I, we're gonna up the speed of our internet like tomorrow. Hopefully we're working on it right now. We're, I believe it came down to an internet issue. Our internet just wasn't fast enough to do the live stream. Somehow it worked in the end but we're gonna up the internet speed so hopefully no more technical difficulties moving forward. Sound good? Sound good? Oh, I'm excited and I appreciate the voting Monday, Wednesday. I think Wednesday is gonna work better because Mondays, again, Monday Night Football, Ginger Runner and then also, I'm just gonna be coming off of the weekend and so if it's Wednesday, I'm gonna have a little bit more time to prepare. I love you all. Thank you for chiming into that question of the day. Okay, keyword, friends. Out on the trails today, absolutely amazing. That's the keyword, friends. And the question of the day. Oh, I love this one. Oh, I love this one. This is gonna be really, really important as we move into the 2019 year and as we move into 2019 running shoes. All right, here we go. What two shoes would you like me to compare against each other in 2019? And it could be within the same brand. It could be a new balance versus Nike. It could be a Solomon versus La Sportiva. It could be two trail shoes, two road shoes, two racing shoes. So what shoes would you like me to compare against each other? All right, an example that I, well, no, I don't wanna skew your answers. All right, so think outside the box. Think about it like, what shoes would you like me to compare in 2019? Sound good? Hit it up down below. I'd appreciate it. Thank you for being here. Thanks for being you on YouTube. This, we did it guys.   Seek beauty, work hard. This is a lot of job. See you tomorrow. Mm-mm-mm. Mm-mm.


I made a video of this product on my channel. Trust me, it's a must watch. If you want to sleep on a budget, this product is blendable, beautiful, above all, super affordable to watch. Full video, click on the link.


Hello, Wikimedia, we are ALCD from National Zhengzi University from Taiwan. We appreciate that this year, our proposal has been selected in the program of Wikimedia. Today, we are going to talk about strategies for the wiki development of Taiwanese Indigenous Languages Communities, Center for Aboriginal Studies, which is known as ALCD in National Zhengzi University, has long been committed to the revitalization of Indigenous languages here in Taiwan. After the government released the writing systems of Indigenous Languages in 2005, it indicated that the government did pay more attention to the promotion of Indigenous Languages here. Data Emeritus Professor Lim Xiu-Tie of NCCU proposed to the Ministry of Education to continue the writing workshop for Indigenous Languages in 2010 to cultivate the writing ability of articles in the communities and to facilitate the writers or the editors to understand the format and style of article writing. The Ministry of Education officially entrusted the ALCD team to implement the Indigenous Languages Wikipedia program in 2014. During the planning process, the ALCD team organized different activities and workshops for the article writing. Later, with the advice and assistance of Wikimedia Taiwan, the communities turned to Wikimedia Incubator for article editing and tried Wikipedia interface translation and translate Wiki. Followed by this step-by-step guidance, more than more members of communities take part into the contribution on Wiki projects. So far, five Wikipedia projects of Taiwan Indigenous Languages has been approved and their sites were set up in 2019 and 2021. Regarding the incubation process of Taiwan Indigenous Languages Wikipedia, the details can be found in issue 79 and 103 of the magazine, Aboriginal Education Award on ALCD website. The 2022 Indigenous Languages Wikipedia editing project is the third phase of the project entrusted by Ministry of Education and the current project will also continue to be implemented by the team ALCD. The focus of this project will be on maintaining the activity of the five Wiki communities, whose Wikipedia projects has been approved. We expect to continue to provide technical support, like a tutorial or online class including basic Wikipedia article editing skills and also expect to threaten other skills of users from the communities through workshops such as uploading image files, audio files to enrich Wikipedia articles. After the added tutorial and workshop, we also plan to organize competitions. Through the competition, the users can improve the content and quality of Wikipedia articles and also to promote the activity of the community. Next, I'm going to talk about development of each community in the future. First of all, independence of the communities through the funding of the Ministry of Education and different workshops, forums, conferences and activities organized by the ALCD team, the Taiwan Indigenous language Wiki communities can maintain a certain activity. However, assuming that in the future, the Ministry of Education's funds will no longer strongly supported or funds will be invested in other language work, if the facilitation of the ALCD team is lost. How the Wiki community in each language operates independently will determine the development of Wiki projects in each language. If there is no Wiki related activities held by the ALCD team in the future, what activities can the communities participate in? For example, the communities might try to participate to some local events, probably organized by Wiki Media Taiwan. In addition, the Taiwan Indigenous language communities can also participate in other international cross Wiki activities. But for this, we believe that language barrier needs to be broken through. The main language on Wiki Media is still English. Under such situation, we hope to guide each community to facilitate them to apply for funding from the Wiki Media Foundation to translate event information into their own language so that the members of each community can understand the information or the content of the event, and this can increase their willingness to participate. In addition to participating in activities, will each community hold their own events or activities to encourage their members to participate in? Before, most of the activities related to Wiki were driven by the funding of the Ministry of Education here, and the facilitation of the ALCD team drive the participation of the communities. When there is no activity, each community may still need a role of the facilitator. The facilitator can indeed lead the participation of the members of the communities. For example, now the city community has a language promotion organization calling for their regular writing meetups. The same, armies and Baywan language communities also have kind of a facilitator to encourage their meetings, discussions, and editing articles. If the motivation of the community is enough to run a plan or apply for a grant from the foundation, it may be possible for them to have a few part-time staffs to act as facilitators to ensure that the community stay active. There are some financial plans which include the budget on staff of other communities or groups can be taken as reference on MetaPage. Second, limitation and difficulties. The first challenge to the contributors might be their language ability. Young writers are not familiar enough with the language itself and lack confidence in writing. Second, editing wikipages can be too complicated for older writers. In general, maybe it could be done in collaboration with younger members and older members. Perhaps in the future, the communities can consider making fluent members provide content of the article already. After recording it into an audio file, it can be transcribed by members who are more familiar with the writing system. Both the audio file and the transcription can be put into the Wikipedia at the same time. Audio Wikipedia like this is also more accessible to readers. Finally, I'm going to talk about cross-community connections. If the resources of the Ministry of Education and the facilitation of the ALCD team are lost in the future, how can the language communities continue to maintain their editing activity? Cross-community activities may recruit more contributors or may keep the active activity of each community. Tech Edithon held by Wikimedia Indonesia and Wikimedia Taiwan as an example. Their members created and improved the articles related to the other countries in their own languages and their own sites during the event. And that's all for today. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. Thank you. T'uninia sa'apu'num kawitai, tuwisi pithia na'amesh. Mapa ini to taneng, yami kawit tuwisi, yaku pa ini atu pira'u ito, kinairairai marat alai'ai paratohan. Mapa roi kata'u nalaktan, to taka maanai asanaan. Masungirah sa'punonia haswa isana'amesh. Kupisa'isar ni'am tu'uninia al-maq i'it. Tata'a ito karafot ko, soar numita wa'amesh. Alai'ai ha'u kuta tayaran. Na'ira ko, pisa'ut namo, tamatunga ruku isar. Amisa'u ito wisi pithia na'amesh. Misa'isar kita ama tayar tu'uninia. Ta'a maanai al-maq, na'u hanit. Niham ha'ai ko finawra ni'ititanan. Tata'a ko sasa'u asana numita ko, niham ha'ai. Niham ha'ai, iti kami amisa'u ito. Tata'u wisi pithia, tamat pa'ulip ko, pungka no'amesh. Mokari ta'angan kuninia, mi pa'a dingai, ato mi patanaka ito, soar ato pungka. Marat isar, amisa'u ruku, pisa'u pot mo namo. Alai'ai ha'ai tine. Niham ha'ai, ma'a pulat. Ma'a rva kenarabata, ma'a kaya talumaza, aki tou cikaran, ta'i chu'a ni'a, cina rivatan tu'a, kemasi chavi'la pata tu'u. A'u, a'i chu'au riku, si tou cikar tu'u, ma'a vanai tu'a, pa'ka du'a ni'a, ti'a man'a pa'i wan'ru ku'a, ka'a bin'a, sa'zuangai tu'a, wiki pithia. A'u, a'i chu'au ni'a, pa'zuru, sa'kai, ni'a ka maruka, a'i chu'au ni'a, sengse'an, a'i a'i k'en. A'i chu'au ni'a, sa'zimana, na'a masan musan, a'u ri'u, ku'u si'i, tou cikar. A'a sangka sangka san, ma'a vanai tu'a, limtu'u, a'a kila rua'i tu'a, pu'zangaran, ka'a tu'a, wiki pithia. A'i chu'au man'a, ta'i sangas, a'a masan musan, ma'a vanai tu'a, k'i chiuran, tu'a, pa'ki turu. Ma'a vanai tu'a, ma'a ta'u sa'u ri'u, si'i, ni'a, pa'zangar, tu'a, pa'zuveril, ta'a, ta'au. A'oi tu'a, ta'i sangas, pu'zangaran, ka'a, ni'a, ni'a binarungan. Ma'a masan musanuttaari ena a'a anyu'an si'a pan'zangar. Ta'e sangas iju'eechu'a, k'i oong tu'a, si'bi'ka ku han'a pa'zu. A'a masan musan, ma'a vanai tu'a, bena'a tu'a i ita'iØ, virusine, a'a sing'e dopeyd bent o'ai tu'ai Sanha san, ta'u, ta'i tu'a, pa'ka ta, k'i oong tu'a pa'zu, Malabar, Amazipazip, Sika, Aichu Nusaka Nunya, Sika Zipazipaichu Naman Dutru, Tarejuan Nya, Sikautua, Baishu. Aichu Nya, Sika, Masan, Rimal, Mavenaichua, Vinari, Dua Nya, Siksatsa-Alan, Kipu-Sensangan, Tarejuan Naman Dutrua, Duryvachan. Nuzuei Chuan Nya, Duryvachan, Maderangaman, Satsangalangan, Kipu-Sensangan, Tazanya-Sensangan. Aichu Nusaka, Masan, Naman. Aichu Nya, Siniya, Kitauchi-Kara, Tarejuan Nga, Malka, Kaita-Yau, Tarejuan Nya, Siniya, Vichivichika, Nya, Chuyaku-Tayou. Riawana Nya, Nya, Kinakurung, Riawana Nya, Nya, Inikan Nya, Kinilang, Namaan, Mangatana, Imi, Tuan Mangatana, Pachugan, Naja Vichik. Sika Nuna Nya, Nunya, Vavurungana, Temuruturu, Tanuaman. Nuna Nunya, Vavurungana, Papu Zangazangar, Tanuaman. Bajangaraman Nya, Nya, Ayawana, Bajangaraman Nya, Mma, Chumung, Teichwa Nama, Tuchwa, Seng, Sangan. Sika Nya, Sma, Bajangaraman Nya, Rava, Tuan Nya, Vavurungana. Aichu Nya, Sika, Masan, Nusan. Mava Nya, Aichu, Nya, Nya, Tua, Itaiviril. Aichu Nya, Nya, Nya, Tua, Itaiviril. Uri, Bajurungana Nya, Kitauchi-Kara. Aya Tua, Aichu, Tauchi-Kara, Nwa, Vavurungana. Mava Nya, Aichu, Masan, Nusan, Urikushi, Aivu. Akuazua, Nya, Nya, Nya. Nunya Nika, Mk. Minda, Nya, Kaki-Turuan. Teichwa Nama, Tuchwa, Kaki-Vadaan. Sanya Tiga, Tua, Vavurungana. Bajangaraman Nya, Bajangaraman Nya, Venechi. Numa Tazwa, Nujungana Nya, Vavurungana, Nya, Kaki-Vadaan. Aru Temau, Chika, Pasmarav, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua, Tua. Nunya Nika, Mk. Maka, Venechi, Teichwa, Nya, Uikipiria, Nama, Tuchwa, Seng, Sengan. Sika, Nunya Nika, Tiamadu, Bajangaraman Nya, Kipu, Seng, Sengan. Aichu, Ita, Sanga, Sanga, Masan, Nusan, Aichu, Masan, Turu. Nya, Masa, Turu, Turu, Teichwa, Nya, Tiamadu. Akuazua, Nya, Nya, Tena, Aichu, Nya, Nya, Nya, Nya, Tau, Chika, Kaki-Vadaan. Nui Nika, Nui Nika PiNa Papua Pana PiNa organsiikan ini kauri ma la ruai, Saka our nea siip ucik, Saka our nea So Ya Kouik N beast & uta, taradu, shi-su-pu-an, shi-ve-chi-kan, te-mao-chi-ke, a-ya-ya-men. Aitua Kukai Riawana lakwa, a-ya-ma-sa-ta-ji-kan, pa-te-ma-za-za-ku, pa-se-ma-ra-fu-ta-nui-te-na-ma-pu-lat, ma-li-ma-li, ma-sa-ru.